/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./src/scripts/pages/account/viewModel.js":
/*!************************************************!*\
  !*** ./src/scripts/pages/account/viewModel.js ***!
  \************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("/* provided dependency */ var ko = __webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\");\n/* provided dependency */ var $ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n__webpack_require__(/*! knockout.validation */ \"./node_modules/knockout.validation/dist/knockout.validation.js\");\n\n__webpack_require__(/*! ../../vendors/bootstrap */ \"./src/scripts/vendors/bootstrap.js\");\n\n__webpack_require__(/*! ../../vendors/knockout.validation.fa-IR */ \"./src/scripts/vendors/knockout.validation.fa-IR.js\");\n\nvar toastr = __webpack_require__(/*! ../../vendors/toastr */ \"./src/scripts/vendors/toastr.js\");\n\nvar apiStatusResource = {\n  InvalidUserOrPasswordError: {\n    fa: 'نام کاربری و یا رمز عبور صحیح نیست'\n  },\n  ErrorLoginLockout: {\n    fa: 'حساب کاربری شما غیر فعال است'\n  },\n  UserHasNoAccessInSystem: {\n    fa: 'این حساب کاربری مجوز ورود به هیچ یک از شرکتهای تعریف شده در سیستم را ندارد'\n  },\n  ErrorLoginNotAuthorized: {\n    fa: 'شما مجاز به ورود به حساب گروه یا شرکت انتخاب شده نمی باشید'\n  },\n  CompanyIsNotActive: {\n    fa: 'حساب کاربری این شرکت غیرفعال می باشد'\n  },\n  ErrorUnknownServer: {\n    fa: 'در هنگام ارتباط با سرور خطای ناشناخته ای رخ داده است'\n  },\n  UserIsLocked: {\n    fa: 'حساب کاربری شما به دلیل ورود بیش از حد مجاز رمز اشتباه  مسدود شده است. برای فعالسازی مجدد آن به مدیر سیستم مراجعه کنید.'\n  },\n  PasswordExpired: {\n    fa: 'رمز عبور شما منقضی شده است.لطفا رمز عبور جدیدی را وارد کنید'\n  },\n  CaptchaInValid: {\n    fa: 'مقدار وارد شده برای تصویر امنیتی صحیح نیست'\n  },\n  CaptchaTimeOut: {\n    fa: 'مهلت وارد کردن تصویر امنیتی به پایان رسیده است. لطفا تصویر امنیتی را رفرش کنید'\n  },\n  OtpSuccess: {\n    fa: 'رمز عبور موقت به ایمیل ثبت شده در پروفایل کاربر ارسال خواهد شد'\n  },\n  OTPFillInput: {\n    fa: 'لطفا نام کاربری و مقدار کپچا را وارد کنید'\n  },\n  OTPExpired: {\n    fa: 'رمز یکبار مصرف شما منقضی شده است . لطفا رمز جدیدی دریافت نمایید'\n  },\n  UserMustLoginWithSSO: {\n    fa: 'این حساب کاربری تنها مجاز به ورود از طریق سیستم متمرکز می باشد'\n  },\n  SSoUserUnauthorized: {\n    fa: 'احرازهویت کاربر در سامانه متمرکز انجام نشد'\n  },\n  SSOUserNameIsAlreadyExist: {\n    fa: 'نام کاربری مورد نظر قبلا در سامانه ثبت شده است'\n  }\n};\n\nvar helper = function (options) {\n  var failToast = function failToast(message) {\n    toastr.options = {\n      \"newestOnTop\": false,\n      \"positionClass\": \"toast-top-left\",\n      \"closeButton\": false,\n      \"toastClass\": \"animated fadeInDown\"\n    };\n    toastr.options.rtl = true;\n    toastr.error(message);\n  };\n\n  var successToast = function successToast(message) {\n    toastr.options = {\n      \"newestOnTop\": false,\n      \"positionClass\": \"toast-bottom-left\",\n      \"closeButton\": false,\n      \"toastClass\": \"animated fadeInDown\"\n    };\n    toastr.options.rtl = true;\n    toastr.success(message);\n  };\n\n  var getApiMessage = function getApiMessage(key) {\n    var item = apiStatusResource[key];\n    return item[\"fa\"] || item['default'] || \"\";\n  };\n\n  var hasSpecialChar = function hasSpecialChar(str) {\n    if (!str) return false;\n    var res = false;\n\n    for (var i = 0; i < str.length; i++) {\n      if (/^[!@#\\$%\\^\\&*\\)\\(+=._-]+$/g.test(str[i])) res = true;\n    }\n\n    return res;\n  };\n\n  var stringIsEnglish = function stringIsEnglish(str) {\n    var index;\n    var english = \" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_+-.<>?|\\\\/\";\n\n    for (index = str.length - 1; index >= 0; --index) {\n      if (english.indexOf(str.substring(index, index + 1)) < 0) {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  var countBackNumberZero = function countBackNumberZero(str) {\n    var count = 0;\n\n    for (var i = 0; i < str.length; i++) {\n      var target = str.substring(i, i + 1);\n      if (target === \"0\") count++;else {\n        return count;\n      }\n    }\n\n    return count;\n  };\n\n  return {\n    getApiMessage: getApiMessage,\n    stringIsEnglish: stringIsEnglish,\n    hasSpecialChar: hasSpecialChar,\n    countBackNumberZero: countBackNumberZero,\n    failToast: failToast,\n    successToast: successToast\n  };\n}();\n\nko.bindingHandlers.valueWithInit = {\n  init: function init(element, valueAccessor, allBindingsAccessor, context) {\n    var observable = valueAccessor();\n    var value = element.value;\n    observable(value);\n    ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, context);\n  },\n  update: ko.bindingHandlers.value.update\n};\nko.validation.rules['englishOnly'] = {\n  validator: function validator(val, otherVal) {\n    if (val === null || val === undefined) return true;\n    return helper.stringIsEnglish(val);\n  },\n  message: 'لطفا به زبان انگلیسی وارد کنید'\n};\nko.validation.rules['confirmPassword'] = {\n  getValue: function getValue(o) {\n    return typeof o === 'function' ? o() : o;\n  },\n  validator: function validator(val, otherField) {\n    var value2 = this.getValue(otherField.params);\n    if (value2 === val) return true;else return false;\n  },\n  message: 'مقدار رمز عبور و تایید باید یکسان باشد'\n};\nko.validation.rules['passwordComplexity'] = {\n  getValue: function getValue(o) {\n    return typeof o === 'function' ? o() : o;\n  },\n  validator: function validator(val, otherField) {\n    //var res = /(?=^[^\\s]{8,20}$)((?=.*?\\d)(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\\d)(?=.*?[^\\w\\d\\s])(?=.*?[a-z])|(?=.*?[^\\w\\d\\s])(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\\d)(?=.*?[A-Z])(?=.*?[^\\w\\d\\s]))^.*/.test('' + val + '');\n    var arr = this.getValue(otherField);\n    var rx = /(?=^[^\\s]{4,20}$)((?=.*?\\d)(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\\d)(?=.*?[^\\w\\d\\s])(?=.*?[a-z])|(?=.*?[^\\w\\d\\s])(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\\d)(?=.*?[A-Z])(?=.*?[^\\w\\d\\s]))^.*/;\n    return helper.hasSpecialChar(val) && rx.test('' + val) && val.length >= arr[0];\n  },\n  message: function message(params, observable, hg) {\n    var min = params[0];\n    return \"\\u0631\\u0645\\u0632 \\u0639\\u0628\\u0648\\u0631 \\u0628\\u0627\\u06CC\\u062F \\u062D\\u062F\\u0627\\u0642\\u0644  \".concat(min, \" \\u06A9\\u0627\\u0631\\u0627\\u06A9\\u062A\\u0631 \\u060C \\u062D\\u062F\\u0627\\u06A9\\u062B\\u0631 20 \\u06A9\\u0627\\u0631\\u0627\\u06A9\\u062A\\u0631 \\u0648 \\u0634\\u0627\\u0645\\u0644 \\u062D\\u0631\\u0648\\u0641\\u060C \\u0627\\u0639\\u062F\\u0627\\u062F \\u0648 \\u06A9\\u0627\\u0631\\u06A9\\u062A\\u0631\\u0647\\u0627\\u06CC \\u0648\\u06CC\\u0698\\u0647 \\u0628\\u0627\\u0634\\u062F\");\n  }\n};\nko.validation.rules['numberOnly'] = {\n  validator: function validator(val, otherVal) {\n    if (val !== null && val !== undefined && val !== \"\") {\n      var test = val.toString();\n      var a = parseInt(test);\n      var afterParse = a.toString();\n      if (afterParse.length <= 0) return false;\n      if (afterParse.length === test.length) return true;else {\n        var backZero = helper.countBackNumberZero(test);\n\n        if (test.length - (afterParse.length + backZero) === 0) {\n          return true;\n        } else {\n          return false;\n        }\n      }\n    }\n\n    return true;\n  },\n  message: ' فقط ورود اعداد مجاز است'\n};\n\nfunction ChangePassword() {\n  var self = this;\n  self.userName = ko.observable();\n  self.newPassword = ko.observable();\n  self.confirmPassword = ko.observable();\n\n  self.setValidationObject = function (complexity) {\n    var l = $(\".login-box\").attr(\"data-pmc\");\n    var obj = {};\n    obj.newPassword = self.newPassword.extend({\n      required: true,\n      englishOnly: true,\n      passwordComplexity: [l]\n    });\n    obj.confirmPassword = self.confirmPassword.extend({\n      required: true,\n      confirmPassword: {\n        params: self.newPassword\n      }\n    });\n    self.validationObject = ko.validatedObservable(obj);\n  };\n}\n\nfunction Login() {\n  var self = this;\n  self.userName = ko.observable();\n  self.password = ko.observable();\n  self.otpCode = ko.observable();\n  self.captchaStr = ko.observable();\n  self.captchaError = ko.observable(null);\n  self.captchaStr.subscribe(function (newValue) {\n    if (newValue !== null) {\n      if (self.captchaError() !== null) self.captchaError(null);\n    }\n  });\n\n  self.setValidationObject = function (complexity, showCaptcha, otp) {\n    var obj = {};\n    var l = $(\".login-box\").attr(\"data-pmc\");\n    obj.userName = self.userName.extend({\n      required: true,\n      englishOnly: true,\n      minLength: 4,\n      maxlength: 20\n    });\n\n    if (!otp) {\n      if (complexity) obj.password = self.password.extend({\n        required: true,\n        englishOnly: true\n      });else obj.password = self.password.extend({\n        required: true,\n        englishOnly: true,\n        minLength: Number(l),\n        maxlength: 20\n      });\n    } else {\n      obj.otpCode = self.otpCode.extend({\n        required: true,\n        numberOnly: true,\n        minLength: 5,\n        maxlength: 7\n      });\n    }\n\n    if (showCaptcha) obj.captchaStr = self.captchaStr.extend({\n      required: true\n    });\n    self.validationObject = ko.validatedObservable(obj);\n  };\n\n  self.refreshValidationMessages = function () {\n    self.userName.valueHasMutated();\n    self.password.valueHasMutated();\n  };\n}\n\nfunction LoginViewModel() {\n  var self = this;\n  self.forceChangePassword = ko.observable(false);\n  self.isPasswordComplexity = ko.observable(true);\n  self.showCaptcha = ko.observable(false);\n  self.showOneTimePassword = ko.observable(false);\n  self.codeSend = ko.observable(false);\n  self.loginModel = ko.observable();\n  self.changePasswordModel = ko.observable();\n\n  self.getCaptcha = function () {\n    self.loginModel().captchaStr(null);\n    var root = location.protocol + '//' + location.host;\n    var img = document.getElementById(\"Captcha_Image\");\n    img.src = root + '/account/getcaptcha' + \"?t=\" + new Date().getTime();\n  };\n\n  self.login = function (item) {\n    if (!item.validationObject.isValid()) {\n      item.validationObject.errors.showAllMessages();\n      return false;\n    }\n\n    var model = {\n      userName: item.userName(),\n      password: item.password(),\n      captcha: item.captchaStr(),\n      otp: self.showOneTimePassword()\n    };\n\n    if (self.showOneTimePassword()) {\n      model.password = item.otpCode();\n    }\n\n    var headers = self.getHeaders();\n    $.ajaxSetup({\n      cache: false\n    });\n    $.ajax({\n      url: '/account/posttoken',\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      type: \"POST\",\n      headers: headers,\n      data: JSON.stringify(model),\n      success: function success(data, textStatus, request) {\n        if (data) {\n          $('.splash').css('display', 'block');\n          self.handleDataToken(data);\n          window.location.href = \"/basicinfo\";\n        }\n      },\n      error: function error(data) {\n        data = data.status;\n        self.handleErrors(data, item);\n      }\n    });\n  };\n\n  self.handleErrors = function (data, item) {\n    var text, model;\n\n    switch (data) {\n      case 552:\n        text = helper.getApiMessage(\"InvalidUserOrPasswordError\");\n        helper.failToast(text);\n        self.getCaptcha();\n\n        if (!self.showOneTimePassword()) {\n          self.loginModel().setValidationObject(self.isPasswordComplexity(), true, false);\n        }\n\n        break;\n\n      case 553:\n        self.SSOActive(false);\n        self.forceChangePassword(true);\n        model = new ChangePassword();\n        model.userName(item.userName());\n        self.changePasswordModel(model);\n        self.changePasswordModel().setValidationObject(true);\n        break;\n\n      case 558:\n        self.forceChangePassword(true);\n        model = new ChangePassword();\n        model.userName(item.userName());\n        self.changePasswordModel(model);\n        text = helper.getApiMessage(\"PasswordExpired\");\n        helper.failToast(text);\n        self.changePasswordModel().setValidationObject(true);\n        break;\n\n      case 554:\n        text = helper.getApiMessage(\"ErrorLoginLockout\");\n        helper.failToast(text);\n        break;\n\n      case 556:\n        text = helper.getApiMessage(\"ErrorLoginNotAuthorized\");\n        helper.failToast(text);\n        break;\n\n      case 557:\n        text = helper.getApiMessage(\"UserIsLocked\");\n        helper.failToast(text);\n        break;\n\n      case 559:\n        text = helper.getApiMessage(\"CaptchaInValid\");\n        self.loginModel().captchaError(text);\n        self.getCaptcha();\n        break;\n\n      case 560:\n        text = helper.getApiMessage(\"CaptchaTimeOut\");\n        self.loginModel().captchaError(text);\n        self.getCaptcha();\n        break;\n\n      case 561:\n        text = helper.getApiMessage(\"UserHasNoAccessInSystem\");\n        helper.failToast(text);\n        break;\n\n      case 571:\n        text = helper.getApiMessage(\"CompanyIsNotActive\");\n        helper.failToast(text);\n        break;\n\n      case 564:\n        text = helper.getApiMessage(\"OTPExpired\");\n        helper.failToast(text);\n        break;\n\n      case 580:\n        text = helper.getApiMessage(\"SSoUserUnauthorized\");\n        helper.failToast(text);\n        break;\n\n      case 582:\n        text = helper.getApiMessage(\"UserMustLoginWithSSO\");\n        helper.failToast(text);\n        break;\n\n      case 583:\n        text = helper.getApiMessage(\"SSOUserNameIsAlreadyExist\");\n        helper.failToast(text);\n        break;\n\n      default:\n        text = helper.getApiMessage(\"ErrorUnknownServer\");\n        helper.failToast(text);\n        break;\n    }\n  };\n\n  self.changePassword = function (item) {\n    if (!item.validationObject.isValid()) {\n      item.validationObject.errors.showAllMessages();\n      return false;\n    }\n\n    var returnurl = $(\".return-url\").text();\n    var model = {\n      userName: item.userName(),\n      newPassword: item.newPassword(),\n      confirmPassword: item.confirmPassword()\n    };\n    $.ajaxSetup({\n      cache: false\n    });\n    $.ajax({\n      url: '/api/account/forcechangepassword',\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      type: \"POST\",\n      data: JSON.stringify(model),\n      success: function success(data, textStatus, request) {\n        if (data) {\n          $('.splash').css('display', 'block');\n          self.handleDataToken(data);\n          if (returnurl === \"/\" || returnurl === \"\") window.location.href = \"/basicinfo\";else window.location.href = returnurl;\n        }\n      },\n      error: function error(data) {\n        data = data.status;\n        self.handleErrors(data, item);\n      }\n    });\n  };\n\n  self.clearLocalStorage = function () {\n    localStorage.removeItem(\"sts\");\n    localStorage.removeItem(\"lsl\");\n    localStorage.removeItem(\"ud\");\n    localStorage.removeItem(\"sd\");\n    localStorage.removeItem(\"fs\");\n  };\n\n  self.getHeaders = function () {\n    return {\n      \"__RequestVerificationToken\": document.getElementsByName(\"__RequestVerificationToken\")[0].value\n    };\n  };\n\n  self.getOtp = function () {\n    if (!self.loginModel().captchaStr() || !self.loginModel().userName()) {\n      text = helper.getApiMessage(\"OTPFillInput\");\n      helper.failToast(text);\n      return false;\n    }\n\n    var model = {\n      userName: self.loginModel().userName(),\n      captcha: self.loginModel().captchaStr(),\n      otp: true\n    };\n    var headers = self.getHeaders();\n    $.ajaxSetup({\n      cache: false\n    });\n    $.ajax({\n      url: '/account/postotp',\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      type: \"POST\",\n      headers: headers,\n      data: JSON.stringify(model),\n      success: function success(data, textStatus, request) {\n        self.codeSend(true);\n        var text = helper.getApiMessage(\"OtpSuccess\");\n        helper.successToast(text);\n        self.getCaptcha();\n      },\n      error: function error(data) {\n        data = data.status;\n        var text, model;\n\n        switch (data) {\n          case 559:\n            text = helper.getApiMessage(\"CaptchaInValid\");\n            self.loginModel().captchaError(text);\n            self.getCaptcha();\n            break;\n\n          case 560:\n            text = helper.getApiMessage(\"CaptchaTimeOut\");\n            self.loginModel().captchaError(text);\n            self.getCaptcha();\n            break;\n\n          default:\n            text = helper.getApiMessage(\"ErrorUnknownServer\");\n            helper.failToast(text);\n            break;\n        }\n      }\n    });\n  };\n\n  self.init = function () {\n    var tt = $(\".login-box\").attr(\"data-tt\");\n    var co = $(\".login-box\").attr(\"data-co\");\n\n    if (co) {\n      self.handleErrors(Number(co));\n    } else {\n      if (tt) {\n        self.tt(tt);\n        self.SSOActive(true);\n        self.getSSO();\n        return;\n      }\n    }\n\n    self.clearLocalStorage();\n    self.showOneTimePassword(false);\n    self.setLoginType();\n  };\n\n  self.setLoginType = function () {\n    self.loginModel(new Login());\n\n    if (self.showOneTimePassword()) {\n      self.showCaptcha(true);\n      self.getCaptcha();\n      self.loginModel().setValidationObject(self.isPasswordComplexity(), true, true);\n    } else {\n      var res = $(\".login-box\").attr(\"data-tag\") === \"True\";\n\n      if (res) {\n        self.showCaptcha(true);\n        self.getCaptcha();\n        self.loginModel().setValidationObject(self.isPasswordComplexity(), true, false);\n      } else {\n        self.showCaptcha(false);\n        self.loginModel().setValidationObject(self.isPasswordComplexity(), false, false);\n      }\n    }\n\n    setTimeout(function () {\n      self.loginModel().refreshValidationMessages();\n      $(\".temp-control\").remove();\n    }, 100);\n  };\n\n  self.changeLoginType = function () {\n    self.showOneTimePassword(!self.showOneTimePassword());\n    self.setLoginType();\n  };\n\n  self.tt = ko.observable();\n  self.SSOActive = ko.observable(false);\n\n  self.backToLogin = function () {\n    self.tt(\"\");\n    self.SSOActive(false);\n    self.showOneTimePassword(false);\n    self.setLoginType();\n  };\n\n  self.checkSSOLoginStatus = function () {\n    self.getSSO();\n  };\n\n  self.handleDataToken = function (data) {\n    if (data) {\n      var lh = $(\".login-box\").attr(\"data-lh\");\n\n      if (lh == \"True\") {\n        localStorage.setItem(\"fs\", \"true\");\n      }\n\n      localStorage.setItem(\"lsl\", data.lsl);\n      localStorage.setItem(\"ud\", JSON.stringify(data.ud));\n      localStorage.setItem(\"sd\", JSON.stringify(data.sd));\n      if (data.sts.length > 0) localStorage.setItem(\"sts\", JSON.stringify(data.sts));else {\n        localStorage.setItem(\"sts\", JSON.stringify([]));\n      }\n    }\n  };\n\n  self.getSSO = function () {\n    var model = {\n      tt: self.tt()\n    };\n    var headers = self.getHeaders();\n    $.ajaxSetup({\n      cache: false\n    });\n    $.ajax({\n      url: '/account/postssotoken',\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      type: \"POST\",\n      headers: headers,\n      data: JSON.stringify(model),\n      success: function success(data, textStatus, request) {\n        if (data) {\n          switch (data.status) {\n            case 1:\n              self.SSOActive(true);\n              break;\n\n            case 2:\n              self.handleErrors(data.errorCode);\n              break;\n\n            case 3:\n              $('.splash').css('display', 'block');\n              self.handleDataToken(data.tvm);\n              window.location.href = \"/basicinfo\";\n              break;\n\n            case 4:\n              self.SSOActive(false);\n              self.forceChangePassword(true);\n              model = new ChangePassword();\n              model.userName(data.userName);\n              self.changePasswordModel(model);\n              self.changePasswordModel().setValidationObject(true);\n              break;\n          }\n        }\n      },\n      error: function error(data) {}\n    });\n  };\n}\n\nko.validation.locale('fa-IR');\nko.validation.init({\n  grouping: {\n    deep: true,\n    live: true,\n    observable: true\n  }\n});\nvar vm = new LoginViewModel();\nko.applyBindings(vm, document.getElementById(\"login-page\"));\nvm.init();\n\n//# sourceURL=webpack://domino/./src/scripts/pages/account/viewModel.js?");

/***/ }),

/***/ "./src/scripts/util/confirm.js":
/*!*************************************!*\
  !*** ./src/scripts/util/confirm.js ***!
  \*************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("/* provided dependency */ var $ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\nmodule.exports = function () {\n  var template = '<div class=\"modal fade confirm-box\" tabindex=\"-1\" role=\"dialog\">' + '<div class=\"modal-dialog\"><div class=\"modal-content\" style=\"width: 450px;\"><div class=\"modal-body\">' + '{BODY}</div><div class=\"modal-footer\">{Buttons} </div></div></div></div>';\n\n  var run = function run(options, callback) {\n    $(\".confirm-box\").remove();\n    var html = $(renderTemplate(options));\n    $(document.body).append(html);\n    $(\".confirm-box\").modal({\n      show: true,\n      backdrop: 'static',\n      keyboard: false\n    });\n\n    if (options.buttons) {\n      for (var i = 0; i < options.buttons.length; i++) {\n        var btnItem = options.buttons[i];\n        var btnTag = $(\".confirm-box\").find(\".btn-\" + btnItem.type).get(0);\n        btnTag.addEventListener('click', function (event) {\n          var value = event.target.getAttribute(\"data-value\");\n          $(\".confirm-box\").modal('hide');\n          if (value === \"true\") callback(true);else if (value === \"false\") callback(false);else if (value === \"undefined\") callback(undefined);else callback(value);\n        });\n      }\n    }\n  };\n\n  var renderTemplate = function renderTemplate(options) {\n    var temp = template;\n\n    if (options.text) {\n      temp = temp.replace(\"{BODY}\", '<p style=\"font-size: 12px;font-weight: 300;\">' + options.text + \"</p>\");\n    }\n\n    if (options.buttons) {\n      var btTags = \"\";\n      var signType;\n\n      for (var i = 0; i < options.buttons.length; i++) {\n        var btnItem = options.buttons[i];\n        btTags += '<button type=\"button\" data-value=\"' + btnItem.value + '\" class=\"btn btn-' + btnItem.type + ' btn-sm\">' + btnItem.text + '</button>';\n        if (btnItem.value === true) signType = btnItem.type;\n      }\n\n      temp = temp.replace(\"{Buttons}\", btTags);\n      return temp;\n    }\n  };\n\n  var renderIcon = function renderIcon(type) {\n    switch (type) {\n      case \"success\":\n        return '<div class=\"swal2-icon swal2-success\"><div class=\"swal2-success-circular-line-left\"></div><span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span><div class=\"swal2-success-ring\"></div> <div class=\"swal2-success-fix\"></div><div class=\"swal2-success-circular-line-right\"></div></div>';\n\n      case \"danger\":\n        return '<div class=\"swal2-icon swal2-error\"><span class=\"swal2-x-mark\"><span class=\"swal2-x-mark-line-left\"></span><span class=\"swal2-x-mark-line-right\"></span></span></div>';\n\n      case \"warning\":\n        return '<div class=\"swal2-icon swal2-warning\"><div class=\"swal2-icon-content\">!</div></div>';\n\n      case \"info\":\n        return '<div class=\"swal2-icon swal2-info\"><div class=\"swal2-icon-content\">i</div></div>';\n    }\n  };\n\n  return {\n    run: run\n  };\n}();\n\n//# sourceURL=webpack://domino/./src/scripts/util/confirm.js?");

/***/ }),

/***/ "./src/scripts/util/dateHelper.js":
/*!****************************************!*\
  !*** ./src/scripts/util/dateHelper.js ***!
  \****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("/* provided dependency */ var ko = __webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\");\nmodule.exports = function (options) {\n  var undf = undefined;\n\n  var isNullOrEmpty = function isNullOrEmpty(str) {\n    return str === null || str === undefined || str === \"\";\n  };\n\n  var div = function div(a, b) {\n    return ~~(a / b);\n  };\n\n  var mod = function mod(a, b) {\n    return a - ~~(a / b) * b;\n  };\n\n  var mod2 = function mod2(a, b) {\n    return Math.abs(a - b * Math.floor(a / b));\n  };\n\n  var toInt = function toInt(text) {\n    return parseInt(text, 10);\n  };\n\n  var getDays = function getDays(date) {\n    var dateArray = date.split('/');\n    if (dateArray[1] < 8) return (dateArray[1] - 1) * 31 + toInt(dateArray[2]);\n    return 6 * 31 + (dateArray[1] - 7) * 30 + toInt(dateArray[2]);\n  };\n\n  var isLeapYear = function isLeapYear(year) {\n    return (year + 12) % 33 % 4 === 1;\n  };\n\n  var getDiffDays = function getDiffDays(date1, date2) {\n    var diffDays = getDays(date2) - getDays(date1);\n    var dateArray1 = date1.split('/');\n    var dateArray2 = date2.split('/');\n    var y1 = dateArray1[0] < dateArray2[0] ? dateArray1[0] : dateArray2[0];\n    var y2 = dateArray1[0] < dateArray2[0] ? dateArray2[0] : dateArray1[0];\n\n    for (var y = y1; y < y2; y++) {\n      if (isLeapYear(y)) diffDays += dateArray1[0] < dateArray2[0] ? 366 : -366;else diffDays += dateArray1[0] < dateArray2[0] ? 365 : -365;\n    }\n\n    return toInt(diffDays);\n  };\n\n  var compare = function compare(date1, date2) {\n    var d1, d2;\n    if (isNullOrEmpty(date1) || isNullOrEmpty(date2)) return undf;\n    if (Object.prototype.toString.call(date1) !== '[object Date]') d1 = new Date(date1);else d1 = date1;\n    if (Object.prototype.toString.call(date2) !== '[object Date]') d2 = new Date(date2);else d2 = date2;\n    if (d1.getDate() === d2.getDate() && d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear()) return 0;\n    if (d1.getFullYear() > d2.getFullYear()) return 1;\n    if (d1.getFullYear() < d2.getFullYear()) return 2;\n    if (d1.getMonth() > d2.getMonth()) return 1;\n    if (d1.getMonth() < d2.getMonth()) return 2;\n    if (d1.getDate() > d2.getDate()) return 1;\n    if (d1.getDate() < d2.getDate()) return 2;\n  };\n\n  var daysBetween = function daysBetween(date1, date2) {\n    var d1, d2;\n    if (isNullOrEmpty(date1) || isNullOrEmpty(date2)) return undf;\n    if (Object.prototype.toString.call(date1) !== '[object Date]') d1 = new Date(date1);else d1 = date1;\n    if (Object.prototype.toString.call(date2) !== '[object Date]') d2 = new Date(date2);else d2 = date2;\n    if (d1.getDate() === d2.getDate() && d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear()) return 0;\n    var startDate = Date.UTC(d1.getFullYear(), d1.getMonth(), d1.getDate());\n    var endDate = Date.UTC(d2.getFullYear(), d2.getMonth(), d2.getDate());\n    var timeDiff = new Date(startDate) - new Date(endDate);\n    var days = timeDiff / (1000 * 60 * 60 * 24);\n    return days;\n  };\n\n  var isFirstHalfYear = function isFirstHalfYear(date) {\n    var persianDate = toJalaali(date);\n    var month = persianDate[1];\n    return parseInt(month + 1) >= 1 && parseInt(month + 1) <= 6;\n  };\n\n  var monthsBetween = function monthsBetween(firstDate, secondDate) {\n    var diff = daysBetween(secondDate, firstDate);\n    var isInFirstHalf = isFirstHalfYear(firstDate);\n    var monthCount = isInFirstHalf ? diff / 30 : diff / 29;\n    return Number(monthCount);\n  };\n\n  var getWeekDay = function getWeekDay(date) {\n    return mod2(getDiffDays('1392/03/25', date), 7);\n  };\n\n  var jalCal = function jalCal(jy) {\n    var breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178],\n        bl = breaks.length,\n        gy = jy + 621,\n        leapJ = -14,\n        jp = breaks[0],\n        jm,\n        jump,\n        leap,\n        n,\n        i;\n    if (jy < jp || jy >= breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n    for (i = 1; i < bl; i += 1) {\n      jm = breaks[i];\n      jump = jm - jp;\n      if (jy < jm) break;\n      leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n      jp = jm;\n    }\n\n    n = jy - jp;\n    leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n    if (mod(jump, 33) === 4 && jump - n === 4) leapJ += 1;\n    var leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150;\n    var march = 20 + leapJ - leapG;\n    if (jump - n < 6) n = n - jump + div(jump + 4, 33) * 33;\n    leap = mod(mod(n + 1, 33) - 1, 4);\n\n    if (leap === -1) {\n      leap = 4;\n    }\n\n    return {\n      leap: leap,\n      gy: gy,\n      march: march\n    };\n  };\n\n  var g2D = function g2D(gy, gm, gd) {\n    var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n    d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n    return d;\n  };\n\n  var d2G = function d2G(jdn) {\n    var j;\n    j = 4 * jdn + 139361631;\n    j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n    var i = div(mod(j, 1461), 4) * 5 + 308;\n    var gd = div(mod(i, 153), 5) + 1;\n    var gm = mod(div(i, 153), 12) + 1;\n    var gy = div(j, 1461) - 100100 + div(8 - gm, 6);\n    return {\n      gy: gy,\n      gm: gm,\n      gd: gd\n    };\n  };\n\n  var j2D = function j2D(jy, jm, jd) {\n    var r = jalCal(jy);\n    return g2D(r.gy, 3, r.march) + (jm - 1) * 31 - div(jm, 7) * (jm - 7) + jd - 1;\n  };\n\n  var d2J = function d2J(jdn) {\n    var gy = d2G(jdn).gy,\n        jy = gy - 621,\n        r = jalCal(jy),\n        jdn1F = g2D(gy, 3, r.march),\n        jd,\n        jm,\n        k;\n    k = jdn - jdn1F;\n\n    if (k >= 0) {\n      if (k <= 185) {\n        jm = 1 + div(k, 31);\n        jd = mod(k, 31) + 1;\n        return {\n          jy: jy,\n          jm: jm,\n          jd: jd\n        };\n      } else {\n        k -= 186;\n      }\n    } else {\n      jy -= 1;\n      k += 179;\n      if (r.leap === 1) k += 1;\n    }\n\n    jm = 7 + div(k, 30);\n    jd = mod(k, 30) + 1;\n    return {\n      jy: jy,\n      jm: jm,\n      jd: jd\n    };\n  };\n\n  var getMonthDays = function getMonthDays(date) {\n    var dateArray = date.split('/');\n    if (dateArray[1] < 7) return 31;\n    if (dateArray[1] < 12) return 30;\n    return isLeapYear(dateArray[0]) ? 30 : 29;\n  };\n\n  var isLeapJalaaliYear = function isLeapJalaaliYear(jy) {\n    return jalCal(jy).leap === 0;\n  };\n\n  var isLeapGregorianYear = function isLeapGregorianYear(year) {\n    return (year & 3) === 0 && (year % 25 !== 0 || (year & 15) === 0);\n  };\n\n  var jalaaliMonthLength = function jalaaliMonthLength(jy, jm) {\n    if (jm <= 6) return 31;\n    if (jm <= 11) return 30;\n    if (isLeapJalaaliYear(jy)) return 30;\n    return 29;\n  };\n\n  var gregorianMonthLength = function gregorianMonthLength(jy, jm) {\n    return new Date(jy, jm, 0).getDate();\n  };\n\n  var isValidJalaaliDate = function isValidJalaaliDate(jy, jm, jd) {\n    return jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= jalaaliMonthLength(jy, jm);\n  };\n\n  var isValidGregorianDate = function isValidGregorianDate(gy, gm, gd) {\n    return gy >= 1920 && gm >= 1 && gm <= 12 && gd >= 1 && gd <= gregorianMonthLength(gy, gm);\n  };\n\n  var toJalaali = function toJalaali(gy, gm, gd) {\n    var date;\n    if (isNullOrEmpty(gy)) return undf;else if (Object.prototype.toString.call(gy) === '[object Date]') {\n      gd = gy.getDate();\n      gm = gy.getMonth() + 1;\n      gy = gy.getFullYear();\n    } else if (Object.prototype.toString.call(gy) === '[object String]' && (gy.indexOf(\":\") !== -1 || gy.indexOf(\"-\") !== -1)) {\n      date = new Date(gy);\n      gd = date.getDate();\n      gm = date.getMonth() + 1;\n      gy = date.getFullYear();\n    } else if (Object.prototype.toString.call(gy) === '[object String]' && gy.indexOf(\"/\") !== -1) {\n      var splits = gy.split(\"/\");\n\n      if (splits.length === 3 && splits[2].length === 4) {\n        gd = Number(splits[1]);\n        gm = Number(splits[0]);\n        gy = Number(splits[2]);\n      } else {\n        return undf;\n      }\n    }\n\n    if (isValidGregorianDate(gy, gm, gd)) {\n      date = d2J(g2D(gy, gm, gd));\n      if (isValidJalaaliDate(date.jy, date.jm, date.jd)) return date;\n    }\n\n    return undf;\n  };\n\n  var getCurrentJalaaliYear = function getCurrentJalaaliYear() {\n    var jDate = toJalaali(new Date());\n    return jDate;\n  };\n\n  var getCurrentGregorianYear = function getCurrentGregorianYear() {\n    var date = new Date();\n    return date.getYear();\n  };\n\n  var getActionLogDate = function getActionLogDate(startDate, endDate) {\n    var date = dateNow(\"en\");\n    var now;\n\n    if (isNullOrEmpty(startDate) && isNullOrEmpty(endDate)) {\n      endDate = date;\n      var persianEndDate = toJalaali(endDate);\n      var persianStartDate = formatDate(persianEndDate.jy, persianEndDate.jm, 1, \"jyyyy/jmm/jdd\");\n      var fm = toGregorian(persianStartDate);\n      startDate = formatDate(fm.gy, fm.gm, fm.gd, \"mm/dd/yyyy\");\n      return [startDate, endDate];\n    }\n\n    if (isNullOrEmpty(startDate) && !isNullOrEmpty(endDate)) {\n      startDate = new Date(endDate);\n      startDate.setMonth(startDate.getMonth() - 6);\n      now = new Date();\n      if (endDate > now) endDate = now;\n      startDate = formatDate(startDate.getFullYear(), startDate.getMonth() + 1, startDate.getDate(), \"mm/dd/yyyy\");\n      return [startDate, endDate];\n    }\n\n    if (!isNullOrEmpty(startDate) && isNullOrEmpty(endDate)) {\n      endDate = new Date(startDate);\n      endDate.setMonth(endDate.getMonth() + 6);\n      now = new Date();\n      if (endDate > now) endDate = now;\n      endDate = formatDate(endDate.getFullYear(), endDate.getMonth() + 1, endDate.getDate(), \"mm/dd/yyyy\");\n      return [startDate, endDate];\n    }\n\n    if (daysBetween(startDate, endDate) > 0) {\n      endDate = new Date(endDate);\n      now = new Date();\n      if (endDate > now) endDate = now;\n      startDate = new Date(endDate);\n      startDate.setMonth(endDate.getMonth() - 6);\n      startDate = formatDate(startDate.getFullYear(), startDate.getMonth() + 1, startDate.getDate(), \"mm/dd/yyyy\");\n      endDate = formatDate(endDate.getFullYear(), endDate.getMonth() + 1, endDate.getDate(), \"mm/dd/yyyy\");\n      return [startDate, endDate];\n    }\n\n    if (monthsBetween(startDate, endDate) > 6) {\n      endDate = new Date(endDate);\n      startDate = new Date(endDate);\n      startDate.setMonth(endDate.getMonth() - 6);\n      startDate = formatDate(startDate.getFullYear(), startDate.getMonth() + 1, startDate.getDate(), \"mm/dd/yyyy\");\n      endDate = formatDate(endDate.getFullYear(), endDate.getMonth() + 1, endDate.getDate(), \"mm/dd/yyyy\");\n      return [startDate, endDate];\n    }\n\n    return [startDate, endDate];\n  };\n\n  var toGregorian = function toGregorian(jd, jm, jy) {\n    if (isNullOrEmpty(jd)) {\n      return undefined;\n    } else if (!jm || !jy) {\n      var splits = jd.split(\"/\");\n      jd = Number(splits[2]);\n      jm = Number(splits[1]);\n      jy = Number(splits[0]);\n    }\n\n    if (isValidJalaaliDate(jy, jm, jd)) var date = d2G(j2D(jy, jm, jd));\n    if (!isNullOrEmpty(date) && isValidGregorianDate(date.gy, date.gm, date.gd)) return date;\n    return undf;\n  };\n\n  var formatDate = function formatDate(y, m, d, pattren) {\n    switch (pattren) {\n      case \"jyyyy/jmm/jdd\":\n        return y + \"/\" + m + \"/\" + d;\n\n      case \"mm/dd/yyyy\":\n        return m + \"/\" + d + \"/\" + y;\n    }\n  };\n\n  var formatPersianDate = function formatPersianDate(date) {\n    var jalali;\n\n    if (ko.isObservable(date)) {\n      if (date() !== null && date() !== undefined && date() !== \"\") {\n        jalali = toJalaali(new Date(date()));\n        return formatDate(jalali.jy, jalali.jm, jalali.jd, \"jyyyy/jmm/jdd\");\n      } else return \"--\";\n    } else {\n      if (date !== null && date !== undefined && date !== \"\") {\n        jalali = toJalaali(new Date(date));\n        return formatDate(jalali.jy, jalali.jm, jalali.jd, \"jyyyy/jmm/jdd\");\n      } else return \"--\";\n    }\n  };\n\n  var formatPersianDateTime = function formatPersianDateTime(date) {\n    var jalali, formated, newDate;\n\n    if (ko.isObservable(date)) {\n      if (date() !== null && date() !== undefined && date() !== \"\") {\n        newDate = new Date(date());\n        jalali = toJalaali(newDate);\n        formated = formatDate(jalali.jy, jalali.jm, jalali.jd, \"jyyyy/jmm/jdd\");\n        return formated + \" \" + newDate.getHours() + \":\" + newDate.getMinutes() + \":\" + newDate.getSeconds();\n      } else return \"--\";\n    } else {\n      if (date !== null && date !== undefined && date !== \"\") {\n        newDate = new Date(date);\n        jalali = toJalaali(newDate);\n        formated = formatDate(jalali.jy, jalali.jm, jalali.jd, \"jyyyy/jmm/jdd\");\n        return formated + \" \" + newDate.getHours() + \":\" + newDate.getMinutes() + \":\" + newDate.getSeconds();\n      } else return \"--\";\n    }\n  };\n\n  var spliteDateStr = function spliteDateStr(str) {\n    var d, m, y, date;\n\n    try {\n      if (str.indexOf(\":\") !== -1 || str.indexOf(\"-\") !== -1) {\n        date = new Date(str);\n        d = date.getDate();\n        m = date.getMonth() + 1;\n        y = date.getFullYear();\n        return {\n          y: y,\n          m: m,\n          d: d,\n          type: \"g\"\n        };\n      } else if (str.indexOf(\"/\") !== -1) {\n        var splits = str.split(\"/\");\n\n        if (splits.length === 3 && splits[2].length === 4) {\n          d = Number(splits[1]);\n          m = Number(splits[0]);\n          y = Number(splits[2]);\n          return {\n            y: y,\n            m: m,\n            d: d,\n            type: \"g\"\n          };\n        }\n\n        if (splits.length === 3 && splits[0].length === 4) {\n          d = Number(splits[2]);\n          m = Number(splits[1]);\n          y = Number(splits[0]);\n          return {\n            y: y,\n            m: m,\n            d: d,\n            type: \"j\"\n          };\n        }\n      }\n\n      return undf;\n    } catch (e) {\n      return undf;\n    }\n  };\n\n  var fromDatePicker = function fromDatePicker(newValue, dateType) {\n    var date = spliteDateStr(newValue);\n    if (!date) return undf;\n\n    switch (dateType) {\n      case \"fa\":\n        if (date.type === \"j\") {\n          var gDate = toGregorian(date.d, date.m, date.y);\n          if (gDate) return formatDate(gDate.gy, gDate.gm, gDate.gd, \"mm/dd/yyyy\");\n          return undf;\n        }\n\n        break;\n    }\n\n    return undf;\n  };\n\n  var toDatePicker = function toDatePicker(str) {\n    var data = spliteDateStr(str);\n\n    if (data.type === \"j\") {\n      return [data, formatDate(data.y, data.m, data.d, \"jyyyy/jmm/jdd\")];\n    }\n\n    if (data.type === \"g\") {\n      var jalaliDate = toJalaali(data.y, data.m, data.d);\n      return [jalaliDate, formatDate(jalaliDate.jy, jalaliDate.jm, jalaliDate.jd, \"jyyyy/jmm/jdd\")];\n    }\n  };\n\n  var dateNow = function dateNow(dateType) {\n    var dateStr = localStorage.getItem(\"ServerDate\");\n    var date;\n    if (!isNullOrEmpty(dateStr) && dateStr !== \"\") date = new Date(dateStr);else date = new Date();\n    var day = date.getDate();\n    var month = date.getMonth() + 1;\n    var year = date.getFullYear();\n\n    switch (dateType) {\n      case \"fa\":\n        var jalaliDate = toJalaali(year, month, day);\n        return formatDate(jalaliDate.jy, jalaliDate.jm, jalaliDate.jd, \"jyyyy/jmm/jdd\");\n\n      case undefined:\n      case \"\":\n      case \"en\":\n        return formatDate(year, month, day, \"mm/dd/yyyy\");\n    }\n  };\n\n  var getDateLastDayOfYear = function getDateLastDayOfYear() {\n    var endDate;\n    var jalali = toJalaali(new Date());\n    var formated = formatDate(jalali.jy, jalali.jm, jalali.jd, \"jyyyy/jmm/jdd\");\n    var year = formated.substring(0, 4);\n    var isLeap = isLeapJalaaliYear(year);\n    if (isLeap) endDate = year + \"/12/30\";else endDate = year + \"/12/29\";\n    var m = toGregorian(endDate);\n    return formatDate(m.gy, m.gm, m.gd, \"mm/dd/yyyy\");\n  };\n\n  return {\n    formatPersianDate: formatPersianDate,\n    formatPersianDateTime: formatPersianDateTime,\n    getDateLastDayOfYear: getDateLastDayOfYear,\n    getCurrentGregorianYear: getCurrentGregorianYear,\n    daysBetween: daysBetween,\n    compare: compare,\n    getMonthDays: getMonthDays,\n    dateNow: dateNow,\n    getWeekDay: getWeekDay,\n    toDatePicker: toDatePicker,\n    fromDatePicker: fromDatePicker,\n    spliteDateStr: spliteDateStr,\n    toJalaali: toJalaali,\n    toGregorian: toGregorian,\n    isLeapGregorianYear: isLeapGregorianYear,\n    isValidJalaaliDate: isValidJalaaliDate,\n    isLeapJalaaliYear: isLeapJalaaliYear,\n    getCurrentJalaaliYear: getCurrentJalaaliYear,\n    getActionLogDate: getActionLogDate,\n    mod: mod,\n    g2d: g2D,\n    d2j: d2J,\n    j2d: j2D,\n    jalCal: jalCal\n  };\n}();\n\n//# sourceURL=webpack://domino/./src/scripts/util/dateHelper.js?");

/***/ }),

/***/ "./src/scripts/util/helper.js":
/*!************************************!*\
  !*** ./src/scripts/util/helper.js ***!
  \************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("/* provided dependency */ var $ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* provided dependency */ var confirmBox = __webpack_require__(/*! ./src/scripts/util/confirm.js */ \"./src/scripts/util/confirm.js\");\n/* provided dependency */ var ko = __webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\");\n/* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* provided dependency */ var dateHelper = __webpack_require__(/*! ./src/scripts/util/dateHelper.js */ \"./src/scripts/util/dateHelper.js\");\n/* provided dependency */ var _hh = __webpack_require__(/*! ./src/scripts/util/htmlHelper.js */ \"./src/scripts/util/htmlHelper.js\");\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n__webpack_require__(/*! ../vendors/jquery-ui.min.js */ \"./src/scripts/vendors/jquery-ui.min.js\");\n\nvar toastr = __webpack_require__(/*! ../vendors/toastr.js */ \"./src/scripts/vendors/toastr.js\");\n\nmodule.exports = function (options) {\n  var resizeTable = function resizeTable() {\n    setTimeout(function () {\n      $('.ko-tbl th:not(.checkbox-col, .stateSwitch-ty, .label-ty)').resizable({\n        handles: 'w',\n        minWidth: 100,\n        _h: \"resizable-_h-t\",\n        start: function start(event, ui) {//var table = $(event.target).closest(\"table\");\n          //table.css(\"table-layout\", \"auto\");\n        },\n        stop: function stop(event, ui) {\n          $(event.target).css(\"left\", 0);\n          kocnx().changeColWidth(event.target); //var table = $(event.target).closest(\"table\");\n          //table.css(\"table-layout\", \"fixed\");\n        },\n        resize: function resize(event, ui) {\n          $(event.target).css(\"left\", 0);\n        }\n      });\n    }, 200);\n  };\n\n  var confirmDeleteAlert = function confirmDeleteAlert(message, callback, withCancelBtn) {\n    var yes = getLocalizedText(\"yesConfirm\");\n    var no = getLocalizedText(\"noConfirm\");\n    var buttons = [{\n      text: yes,\n      type: \"danger\",\n      value: true\n    }, {\n      text: no,\n      type: \"default\",\n      value: false\n    }];\n\n    if (withCancelBtn) {\n      var cancel = getLocalizedText(\"cancelConfirm\");\n      buttons.push({\n        text: cancel,\n        type: \"success\",\n        value: undefined\n      });\n    }\n\n    confirmBox.run({\n      text: message,\n      buttons: buttons\n    }, function (res) {\n      callback(res);\n    });\n  };\n\n  var confirmTableTemplateAlert = function confirmTableTemplateAlert(message, callback, withCancelBtn) {\n    var yes = getLocalizedText(\"yesConfirm\");\n    var no = getLocalizedText(\"noConfirm\");\n    var buttons = [{\n      text: yes,\n      type: \"success\",\n      value: true\n    }, {\n      text: no,\n      type: \"danger\",\n      value: false\n    }];\n\n    if (withCancelBtn) {\n      var cancel = getLocalizedText(\"cancelConfirm\");\n      buttons.push({\n        text: cancel,\n        type: \"warning\",\n        value: undefined\n      });\n    }\n\n    confirmBox.run({\n      text: message,\n      buttons: buttons\n    }, function (res) {\n      callback(res);\n    });\n  };\n\n  var confirmChooseAlert = function confirmChooseAlert(message, callback) {\n    confirmBox.run({\n      text: message,\n      buttons: [{\n        text: \"اعمال\",\n        type: \"success\",\n        value: true\n      }, {\n        text: \"لغو\",\n        type: \"danger\",\n        value: false\n      }, {\n        text: \"انصراف\",\n        type: \"default\",\n        value: undefined\n      }]\n    }, function (res) {\n      callback(res);\n    });\n  };\n\n  var warningToast = function warningToast(message) {\n    toastr.options = {\n      \"newestOnTop\": false,\n      \"positionClass\": \"toast-bottom-left\",\n      \"closeButton\": false,\n      \"toastClass\": \"animated fadeInDown\"\n    };\n    toastr.options.rtl = true;\n    toastr.warning(message);\n  };\n\n  var successToast = function successToast(message) {\n    toastr.options = {\n      \"newestOnTop\": false,\n      \"positionClass\": \"toast-bottom-left\",\n      \"closeButton\": false,\n      \"toastClass\": \"animated fadeInDown\"\n    };\n    toastr.options.rtl = true;\n    toastr.success(message);\n  };\n\n  var failToast = function failToast(message) {\n    toastr.options = {\n      \"newestOnTop\": false,\n      \"positionClass\": \"toast-top-left\",\n      \"closeButton\": false,\n      \"toastClass\": \"animated fadeInDown\"\n    };\n    toastr.options.rtl = true;\n    toastr.error(message);\n  };\n\n  var findControllerName = function findControllerName(name) {\n    var value = 0;\n\n    for (var i = 0; i < controllerNames.length; i++) {\n      if (controllerNames[i].enText.toLowerCase() === name.toLowerCase()) value = controllerNames[i].value;\n    }\n\n    return value;\n  };\n\n  var getEnumText = function getEnumText(values, id) {\n    var value = null;\n    $.each(values, function (i, p) {\n      if (p.value === id) value = p.text;\n    });\n    return value;\n  };\n\n  var getEnumEnText = function getEnumEnText(values, id) {\n    var value = null;\n    $.each(values, function (i, p) {\n      if (p.value === id) value = p.enText;\n    });\n    return value;\n  };\n\n  var getEnumItem = function getEnumItem(values, id) {\n    var value = null;\n    $.each(values, function (i, p) {\n      if (p.value === id) value = p;\n    });\n    return value;\n  };\n\n  var getEnumItemByText = function getEnumItemByText(values, text) {\n    var value = null;\n    $.each(values, function (i, p) {\n      if (p.enText === text) value = p;\n    });\n    return value;\n  };\n\n  var kocnx = function kocnx() {\n    var wrapper = $(\"#ko_wrapper\");\n\n    if (wrapper) {\n      var context = ko.contextFor(wrapper[0]);\n      if (context) return context.$data;\n    }\n  };\n\n  var countBackNumberZero = function countBackNumberZero(str) {\n    var count = 0;\n\n    for (var i = 0; i < str.length; i++) {\n      var target = str.substring(i, i + 1);\n      if (target === \"0\") count++;else {\n        return count;\n      }\n    }\n\n    return count;\n  };\n\n  var isNumeric = function isNumeric(obj) {\n    return !jQuery.isArray(obj) && obj - parseFloat(obj) + 1 >= 0;\n  };\n\n  var abd = function abd(a, n) {\n    n = (n + \"\").replace(\"9\", \"\").replace(\"0\", \"\");\n    n = n.split(\"\");\n    var s = \"\";\n    n.forEach(function (x) {\n      var p = Number(x);\n      var ab = a[p - 1];\n      s += ab;\n    });\n    return s;\n  };\n\n  var getExtension = function getExtension(value) {\n    if (!value) return \"\";\n    var filename = value.replace(/^.*[\\\\\\/]/, \"\");\n    return filename.slice((filename.lastIndexOf(\".\") - 1 >>> 0) + 2);\n  };\n\n  var getApiMessage = function getApiMessage(key) {\n    var item = apiMessages[key];\n    if (item === undefined || item === \"\") item = clientMessages[key];\n    if (item === undefined || item === \"\") item = cmdMessages[key];\n    var text = item[locale] || item['default'] || \"\";\n    return text;\n  };\n\n  var generateUuid = function generateUuid() {\n    var d = new Date().getTime();\n    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n      var r = (d + Math.random() * 16) % 16 | 0;\n      d = Math.floor(d / 16);\n      return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n    });\n    return uuid;\n  };\n\n  var getLocalizedText = function getLocalizedText(binding, subDomain) {\n    var domain = window.resDomain;\n\n    if (typeof domain === \"undefined\") {\n      throw \"res domain is empty\";\n    }\n\n    if (typeof locale === \"undefined\") {\n      throw \"ko.localationbinding.getLocalizedText: locale object is not defined\";\n    }\n\n    if (Object.prototype.toString.call(binding) === '[object String]') {\n      binding = {\n        key: binding\n      };\n    }\n\n    if (!binding) var y = 2;\n    var key = binding.key;\n    var item = commonRes[key];\n\n    if (!item) {\n      item = reportgenRes[key];\n    }\n\n    if (!item) {\n      item = findModelRes(key, domain);\n    }\n\n    if (!item) {\n      item = findPageRes(key, domain, subDomain);\n    }\n\n    if (!item) {\n      item = tabNameRes[key];\n    }\n\n    if (!item) {\n      var x = 2;\n    }\n\n    var text = item[locale] || item['default'] || \"\";\n\n    if (binding.params) {\n      for (var replaceKey in binding.params) {\n        if (binding.params.hasOwnProperty(replaceKey)) {\n          var replacement = binding.params[replaceKey];\n\n          if (typeof replacement === \"function\") {\n            replacement = ko.utils.unwrapObservable(replacement());\n          }\n\n          text = text.replace(\"#\" + replaceKey, replacement);\n        }\n      }\n    }\n\n    return text;\n  };\n\n  var findModelRes = function findModelRes(key, domain) {\n    switch (domain) {\n      case \"ActionLog\":\n      case \"Access\":\n      case \"Company\":\n      case \"GroupPeriod\":\n      case \"Consolidate\":\n      case \"OnlineUser\":\n      case \"DynamicTable\":\n      case \"CompanyInfo\":\n      case \"DynamicDocument\":\n        return window[domain.toLowerCase() + \"ModelRes\"][key];\n\n      case \"Period\":\n        var periodVal = periodModelRes[key];\n        if (periodVal === null || periodVal === undefined) periodVal = comparativeperiodsModelRes[key];\n        if (periodVal === null || periodVal === undefined) periodVal = periodhistoryModelRes[key];\n        return periodVal;\n\n      case \"User\":\n        var userVal = userModelRes[key];\n        if (userVal === null || userVal === undefined) userVal = usercontentModelRes[key];\n        return userVal;\n\n      case \"Tree\":\n        var treeVal = treeModelRes[key];\n        if (treeVal === null || treeVal === undefined) treeVal = valuepartsModelRes[key];\n        return treeVal;\n\n      case \"Balancesheet\":\n        var val = balancesheetModelRes[key];\n        if (val === null || val === undefined) val = balancesheetcontentModelRes[key];\n        return val;\n\n      case \"Mapping\":\n        var valMapping = mappingtreeModelRes[key];\n        if (valMapping === null || valMapping === undefined) valMapping = mappingDataModelRes[key];\n        if (valMapping === null || valMapping === undefined) valMapping = substituteNodeModelRes[key];\n        if (valMapping === null || valMapping === undefined) valMapping = mappingruleModelRes[key];\n        if (valMapping === null || valMapping === undefined) valMapping = mappingruledataModelRes[key];\n        return valMapping;\n\n      case \"BalanceReport\":\n        var valBalancereport = balancereportModelRes[key];\n        if (valBalancereport === null || valBalancereport === undefined) valBalancereport = reportbalancedataModelRes[key];\n        if (valBalancereport === null || valBalancereport === undefined) valBalancereport = totalbalancereportModelRes[key];\n        if (valBalancereport === null || valBalancereport === undefined) valBalancereport = reportbalancedatadetailsModelRes[key];\n        return valBalancereport;\n\n      case \"TableTemplate\":\n        var valTableTemplate = tabletemplateModelRes[key];\n        if (valTableTemplate === null || valTableTemplate === undefined) valTableTemplate = tabletemplatepreviewModelRes[key];\n        if (valTableTemplate === null || valTableTemplate === undefined) valTableTemplate = treeInfoModelRes[key];\n        if (valTableTemplate === null || valTableTemplate === undefined) valTableTemplate = tableModelRes[key];\n        return valTableTemplate;\n\n      case \"Magazine\":\n        var valMagazine = magazineModelRes[key];\n        if (valMagazine === null || valMagazine === undefined) valMagazine = savemagazineModelRes[key];\n        if (valMagazine === null || valMagazine === undefined) valMagazine = magazinePreviewPageRes[key];\n        return valMagazine;\n\n      case \"AdjustmentDocument\":\n        var valadjustmentdocument = adjustmentdocumentModelRes[key];\n        if (valadjustmentdocument === null || valadjustmentdocument === undefined) valadjustmentdocument = adjustmentdocumentitemModelRes[key];\n        return valadjustmentdocument;\n    }\n\n    return null;\n  };\n\n  var findPageRes = function findPageRes(key, domain, subDomain) {\n    switch (domain) {\n      case \"CompanyInfoData\":\n      case \"CompanyInfo\":\n        var companyInfoData = companyinfoPageRes[key];\n        if (companyInfoData === null || companyInfoData === undefined) companyInfoData = companyInfoDataPageRes[key];\n        return companyInfoData;\n\n      case \"ActionLog\":\n        return actionlogPageRes[key];\n\n      case \"Company\":\n        return companyPageRes[key];\n\n      case \"Period\":\n        var period = periodPageRes[key];\n        if (period === null || period === undefined) period = periodHistoryPageRes[key];\n        if (period === null || period === undefined) period = periodGroupHistoryPageRes[key];\n        return period;\n\n      case \"Tree\":\n        return treePageRes[key];\n\n      case \"User\":\n        var userVal = userPageRes[key];\n        if (userVal === null || userVal === undefined) userVal = usercontentPageRes[key];\n        return userVal;\n\n      case \"Access\":\n        return accessPageRes[key];\n\n      case \"Balancesheet\":\n        var val = balancesheetPageRes[key];\n        if (val === null || val === undefined) val = balancesheetContentPageRes[key];\n        return val;\n\n      case \"Mapping\":\n        var valMapping;\n\n        switch (subDomain) {\n          case \"MappingRule\":\n            valMapping = mappingrulePageRes[key];\n            break;\n\n          case \"SubstituteNode\":\n            valMapping = substitutenodePageRes[key];\n            break;\n\n          default:\n            valMapping = mappingTreePageRes[key];\n            if (valMapping === null || valMapping === undefined) valMapping = mappingDataPageRes[key];\n            if (valMapping === null || valMapping === undefined) valMapping = substitutenodePageRes[key];\n            if (valMapping === null || valMapping === undefined) valMapping = mappingrulePageRes[key];\n            break;\n        }\n\n        return valMapping;\n\n      case \"BalanceReport\":\n        var valBalanceReport = balancereportFilterRes[key];\n        if (valBalanceReport === null || valBalanceReport === undefined) valBalanceReport = balancereportPageRes[key];\n        if (valBalanceReport === null || valBalanceReport === undefined) valBalanceReport = totalBalanceReportPageRes[key];\n        if (valBalanceReport === null || valBalanceReport === undefined) valBalanceReport = reportBalanceDataPageRes[key];\n        return valBalanceReport;\n\n      case \"TableTemplate\":\n        var valTableTemplate = tabletemplatePageRes[key];\n        if (valTableTemplate === null || valTableTemplate === undefined) valTableTemplate = tableStructurePageRes[key];\n        if (valTableTemplate === null || valTableTemplate === undefined) valTableTemplate = reportgenRes[key];\n        return valTableTemplate;\n\n      case \"Magazine\":\n        var valMagazine = magazinePageRes[key];\n        if (valMagazine === null || valMagazine === undefined) valMagazine = savemagazinePageRes[key];\n        return valMagazine;\n\n      case \"AdjustmentDocument\":\n        var valadjustmentdocument = adjustmentdocumentPageRes[key];\n        if (valadjustmentdocument === null || valadjustmentdocument === undefined) valadjustmentdocument = adjustmentdocumentitemPageRes[key];\n        return valadjustmentdocument;\n\n      case \"GroupPeriod\":\n        return groupperiodPageRes[key];\n\n      case \"Consolidate\":\n        return consolidatePageRes[key];\n\n      case \"DynamicTable\":\n        var valdynamictable = dynamictablePageRes[key];\n        if (valdynamictable === null || valdynamictable === undefined) valdynamictable = dynamictabledataPageRes[key];\n        return valdynamictable;\n\n      case \"DynamicDocument\":\n        return dynamicdocumentPageRes[key];\n\n      case \"OnlineUser\":\n        return onlineuserPageRes[key];\n    }\n\n    return null;\n  };\n\n  var createOneDepthLines = function createOneDepthLines(item) {\n    ko.utils.arrayFilter(item.children(), function (child) {\n      child.createlines();\n    });\n  };\n\n  var toggleChildren = function toggleChildren(item) {\n    if (item.childrenShow() === false) {\n      item.childrenShow(true);\n      createOneDepthLines(item);\n    } else {\n      item.childrenShow(false);\n    }\n  };\n\n  var fixLabelsSize = function fixLabelsSize() {\n    var list = $(\".control-label\");\n    if (list && list.length) for (var i = 0; i < list.length; i++) {\n      var target = list[i];\n      var size = calDim($(target).text(), \"11px\", \"Iransans\", \"400\");\n      $(target).css(\"width\", size[1] + 5 + \"px\");\n    }\n  };\n\n  var setSd = function setSd(object) {\n    localStorage.setItem(\"sd\", JSON.stringify(object));\n  };\n\n  var getSd = function getSd() {\n    var object = localStorage.getItem('sd');\n\n    if (object !== null && object !== undefined && object !== \"\") {\n      return JSON.parse(object);\n    }\n\n    return null;\n  };\n\n  var setUd = function setUd(object) {\n    localStorage.setItem(\"ud\", JSON.stringify(object));\n  };\n\n  var getUd = function getUd() {\n    var object = localStorage.getItem('ud');\n\n    if (object !== null && object !== undefined && object !== \"\") {\n      return JSON.parse(object);\n    }\n\n    return null;\n  };\n\n  var toggleParent = function toggleParent() {\n    var a = getUd();\n    var b = getSd();\n    return {\n      a: [a.ur.usr_cks, a.cmp.cmp_cks, a.prd.prd_cks, b.sys_dt_rf, a.sys_date_trs, a.ur.avt_bg, b.cks_sys_bg, a.prd.col_lt],\n      b: a.cmp.log_cl_cks\n    };\n  };\n\n  var getTvm = function getTvm() {\n    var a = toggleParent();\n    var b = abd(a.a, a.b);\n\n    if (b) {\n      return b;\n    }\n\n    return null;\n  };\n\n  var backToLogin = function backToLogin() {\n    var pathName = \"\";\n    if (window.location.pathname) pathName = \"?returnUrl=\" + window.location.pathname;\n    window.location.href = \"/account/login\" + pathName;\n  };\n\n  var isNullOrEmpty = function isNullOrEmpty(model) {\n    if (model === null || model === undefined) {\n      return true;\n    }\n\n    return false;\n  };\n\n  var isEmpty = function isEmpty(model) {\n    if (model === null || model === undefined || model === \"\") {\n      return true;\n    }\n\n    return false;\n  };\n\n  var isBigger = function isBigger(number, cond) {\n    return number !== null && number !== undefined && number > cond;\n  };\n\n  var any = function any(model) {\n    if (model !== null && model !== undefined && model.length > 0) {\n      return true;\n    }\n\n    return false;\n  };\n\n  var errorListHandler = function errorListHandler(list) {\n    for (var j = 0; j < list.length; j++) {\n      var target = list[j];\n\n      if (target[\"selfDescriptive\"] && target.selfDescriptive === true) {\n        failToast(target.description);\n      } else {\n        var text = getApiMessage(target.code);\n        text = completeError(text, target);\n        failToast(text);\n      }\n    }\n  };\n\n  var warningListHandler = function warningListHandler(list) {\n    for (var j = 0; j < list.length; j++) {\n      var target = list[j];\n\n      if (target[\"selfDescriptive\"] && target.selfDescriptive === true) {\n        failToast(target.description);\n      } else {\n        var text = getApiMessage(target.code);\n        text = completeError(text, target);\n        warningToast(text);\n      }\n    }\n  };\n\n  var successListHandler = function successListHandler(list) {\n    for (var j = 0; j < list.length; j++) {\n      var target = list[j];\n      var text = getApiMessage(target.code);\n      text = completeError(text, target);\n      successToast(text);\n    }\n  };\n\n  var formatTextIfNull = function formatTextIfNull(text, sign) {\n    var outIfNull = sign;\n    if (outIfNull === null || outIfNull === undefined) outIfNull = \"-\";\n    if (text === null || text === undefined || text === \"undefined\" || text === \"null\" || text === \"\" || text === 0 || text === '0') return outIfNull;\n\n    if ($.isNumeric(text)) {\n      return formatNumber(text, false);\n    }\n\n    return text;\n  };\n\n  var emptyTextIfNull = function emptyTextIfNull(text, sign) {\n    var outIfNull = sign;\n    if (outIfNull === null || outIfNull === undefined) outIfNull = \"\";\n    if (text === null || text === undefined || text === \"undefined\" || text === \"null\" || text === \"\" || text === 0 || text === '0') return outIfNull;\n    return text;\n  };\n\n  var setAppSetting = function setAppSetting(data) {\n    var cast = JSON.parse(data);\n\n    for (var p in cast) {\n      if (cast.hasOwnProperty(p)) {\n        var target = cast[p];\n        localStorage.setItem(target.Key, target.Value);\n      }\n    }\n  };\n\n  var getAppSetting = function getAppSetting(key) {\n    var value = localStorage.getItem(key);\n\n    if (value === null || value === undefined || value === \"\") {\n      return null;\n    }\n\n    return value;\n  };\n\n  var toggleDisableSections = function toggleDisableSections(signalMappingStructureDisable) {\n    var context = kocnx();\n    var isExistPeriod = context.periodItem() !== null && context.periodItem() !== undefined;\n    var isExistMappingStructure = context.currentMappingEnabled();\n    var isCompany = context.loginCompanyType() === 1;\n\n    if (isExistPeriod) {\n      $(\".trees-dis-menu a\").attr(\"href\", \"/trees\");\n      $(\".operation-dis-menu a\").attr(\"href\", \"/operation\");\n      $(\".reports-dis-menu a\").attr(\"href\", \"/reports\");\n      $(\".notes-dis-menu a\").attr(\"href\", \"/notes\");\n      $(\".operation-dis-menu\").addClass(\"operation-menu\");\n      $(\".reports-dis-menu\").addClass(\"reports-menu\");\n      $(\".notes-dis-menu\").addClass(\"notes-menu\");\n      $(\".operation-menu\").removeClass(\"operation-dis-menu\");\n      $(\".reports-menu\").removeClass(\"reports-dis-menu\");\n      $(\".notes-menu\").removeClass(\"notes-dis-menu\");\n      $(\".trees-menu\").removeClass(\"trees-dis-menu\");\n\n      if (!isCompany) {\n        $('a[href=\"#Company-t\"]').parent().removeClass(\"disabledTab\");\n        return;\n      }\n\n      if (isExistMappingStructure) {\n        $('a[href=\"#Mapping-t\"]').parent().removeClass(\"disabledTab\");\n        $('a[href=\"#Balancesheet-t\"]').parent().removeClass(\"disabledTab\");\n        $('a[href=\"#AdjustmentDocument-t\"]').parent().removeClass(\"disabledTab\");\n      }\n\n      if (!isExistMappingStructure || signalMappingStructureDisable === true) {\n        $('a[href=\"#Mapping-t\"]').parent().addClass(\"disabledTab\");\n        $('a[href=\"#Balancesheet-t\"]').parent().addClass(\"disabledTab\");\n        $('a[href=\"#AdjustmentDocument-t\"]').parent().addClass(\"disabledTab\");\n        var path = window.location.pathname.toLowerCase().split(\"?\");\n\n        if (path[0] !== \"\") {\n          var array = path[0].split(\"/\");\n          array = $.grep(array, function (n) {\n            return n !== \"\";\n          });\n\n          if (array.length > 0) {\n            if (\"reports\".indexOf(array[0]) !== -1 || \"notes\".indexOf(array[0]) !== -1) {\n              window.location.href = \"/operation\";\n            }\n\n            if (\"operation\".indexOf(array[0]) !== -1) {\n              $('a[href=\"#Balancesheet-t\"]').trigger('click');\n            }\n          }\n        }\n      }\n    } else {\n      $(\".trees-menu a\").attr(\"href\", \"#\");\n      $(\".operation-menu a\").attr(\"href\", \"#\");\n      $(\".reports-menu a\").attr(\"href\", \"#\");\n      $(\".notes-menu a\").attr(\"href\", \"#\");\n      $(\".trees-menu\").addClass(\"trees-dis-menu\");\n      $(\".operation-menu\").addClass(\"operation-dis-menu\");\n      $(\".reports-menu\").addClass(\"reports-dis-menu\");\n      $(\".notes-menu\").addClass(\"notes-dis-menu\");\n      $(\".trees-dis-menu\").removeClass(\"trees-menu\");\n      $(\".operation-dis-menu\").removeClass(\"operation-menu\");\n      $(\".reports-dis-menu\").removeClass(\"reports-menu\");\n      $(\".notes-dis-menu\").removeClass(\"notes-menu\");\n\n      if (!isCompany) {\n        $('a[href=\"#Company-t\"]').parent().addClass(\"disabledTab\");\n      }\n    }\n  };\n\n  var buildTree = function buildTree(list) {\n    var idFieldName = 'id';\n    var parentKeyFieldName = 'pi';\n    var fieldNameForChildren = 'children';\n    var rootElements = [];\n    var lookup = {};\n    list.forEach(function (flatItem) {\n      var itemId = flatItem[idFieldName];\n      lookup[itemId] = flatItem;\n      flatItem[fieldNameForChildren] = [];\n    });\n    list.forEach(function (flatItem) {\n      var parentKey = flatItem[parentKeyFieldName];\n\n      if (parentKey !== null) {\n        var parentObject = lookup[flatItem[parentKeyFieldName]];\n\n        if (parentObject) {\n          parentObject[fieldNameForChildren].push(flatItem);\n        } else {\n          rootElements.push(flatItem);\n        }\n      } else {\n        rootElements.push(flatItem);\n      }\n    });\n    return rootElements;\n  };\n\n  var numberToAlphabet = function numberToAlphabet(num) {\n    if (num) {\n      for (var ret = '', a = 1, b = 26; (num -= a) >= 0; a = b, b *= 26) {\n        ret = String.fromCharCode(parseInt(num % b / a) + 65) + ret;\n      }\n\n      return ret;\n    }\n  };\n\n  var alphabetToNumber = function alphabetToNumber(alfabet) {\n    if (alfabet) {\n      var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n          i,\n          j,\n          result = 0;\n\n      for (i = 0, j = alfabet.length - 1; i < alfabet.length; i += 1, j -= 1) {\n        result += Math.pow(base.length, j) * (base.indexOf(alfabet[i]) + 1);\n      }\n\n      return result;\n    }\n  };\n\n  var getIcon = function getIcon(key) {\n    if (key === null || key === undefined) return '';\n    var array = {\n      Create: {\n        fa: 'create.png'\n      },\n      create: {\n        fa: 'create.png'\n      },\n      Edit: {\n        fa: 'edit.png'\n      },\n      edit: {\n        fa: 'edit.png'\n      },\n      Delete: {\n        fa: 'delete.png'\n      },\n      \"delete\": {\n        fa: 'delete.png'\n      },\n      Cancel: {\n        fa: 'cancel.png'\n      },\n      Refresh: {\n        fa: 'refresh.png'\n      },\n      Copy: {\n        fa: 'copy.png'\n      },\n      Paste: {\n        fa: 'paste.png'\n      },\n      Cut: {\n        fa: 'cut.png'\n      },\n      Up: {\n        fa: 'up.png'\n      },\n      Down: {\n        fa: 'down.png'\n      },\n      RoleUser: {\n        fa: 'access.png'\n      },\n      ChangePassword: {\n        fa: 'password.png'\n      },\n      Comparatives: {\n        fa: 'comparatives.png'\n      },\n      ClosePeriod: {\n        fa: 'closeperiod.png'\n      },\n      OpenPeriod: {\n        fa: 'openperiod.png'\n      },\n      SendPeriod: {\n        fa: 'period-send.png'\n      },\n      TakebackPeriod: {\n        fa: 'period-takeback.png'\n      },\n      Archive: {\n        fa: 'archive.png'\n      },\n      UnArchive: {\n        fa: 'unarchive.png'\n      },\n      Calculator: {\n        fa: 'calculator.png'\n      },\n      ExportExcel: {\n        fa: 'exportexcel.png'\n      },\n      ImportExcel: {\n        fa: 'importexcel.png'\n      },\n      Key: {\n        fa: 'key.png'\n      },\n      Sort: {\n        fa: 'sort.png'\n      },\n      Save: {\n        fa: 'save.png'\n      },\n      TreeCreate: {\n        fa: 'treecreate.png'\n      },\n      ValueEdit: {\n        fa: 'valueedit.png'\n      },\n      ExportPdf: {\n        fa: 'exportpdf.png'\n      },\n      storePdf: {\n        fa: 'storePdf.png'\n      },\n      ExportHtml: {\n        fa: 'export_html.png'\n      },\n      ReportDesign: {\n        fa: 'reportdesign.png'\n      },\n      FileList: {\n        fa: 'filelist.png'\n      },\n      SelectRow: {\n        fa: 'selectrow.png'\n      },\n      Preview: {\n        fa: 'preview.png'\n      },\n      PageContent: {\n        fa: 'pagecontent.png'\n      },\n      Statement: {\n        fa: 'statement.png'\n      },\n      StatementOption: {\n        fa: 'statementoption.png'\n      },\n      PercentOwnership: {\n        fa: 'percentownership.png'\n      },\n      Consolidate: {\n        fa: 'consolidate.png'\n      },\n      DocsEnable: {\n        fa: 'docs-enable.png'\n      },\n      DocsDisable: {\n        fa: 'docs-disable.png'\n      },\n      DocsConfirm: {\n        fa: 'docs-confirm.png'\n      },\n      DocsTemporary: {\n        fa: 'docs-temporary.png'\n      },\n      DocEnable: {\n        fa: 'doc-enable.png'\n      },\n      DocDisable: {\n        fa: 'doc-disable.png'\n      },\n      DocConfirm: {\n        fa: 'doc-confirm.png'\n      },\n      DocTemporary: {\n        fa: 'doc-temporary.png'\n      },\n      AccountingNature: {\n        fa: 'account-statement.png'\n      },\n      EraseCell: {\n        fa: 'cell_style-erase.png'\n      },\n      MergeCells: {\n        fa: 'cells_merge.png'\n      },\n      Help: {\n        fa: 'help.png'\n      },\n      CalculateToday: {\n        fa: 'calculatortoday.png'\n      },\n      CalculateDate: {\n        fa: 'calculatordate.png'\n      },\n      ImportFile: {\n        fa: 'import_from_database.png'\n      },\n      ExportFile: {\n        fa: 'export_to_database.png'\n      },\n      CalculateDocument: {\n        fa: 'calculatordocment.png'\n      },\n      CalculateDocumentDelete: {\n        fa: 'calculatedocument-delete.png'\n      },\n      StockBuy: {\n        fa: 'buy.png'\n      },\n      StockSell: {\n        fa: 'sell.png'\n      },\n      ListDelete: {\n        fa: \"list-delete.png\"\n      },\n      DatabaseLink: {\n        fa: \"database-link.png\"\n      },\n      NodeReport: {\n        fa: \"node-report.png\"\n      },\n      ReportDownload: {\n        fa: \"report-preview.png\"\n      },\n      MappingOn: {\n        fa: \"link-add2.png\"\n      },\n      MappingOff: {\n        fa: \"link-delete2.png\"\n      },\n      AcceptTreeChange: {\n        fa: \"tree-ok.png\"\n      },\n      RejectTreeChange: {\n        fa: \"tree-delete2.png\"\n      },\n      AcceptTable: {\n        fa: \"tree-new.png\"\n      },\n      Info: {\n        fa: \"info.png\"\n      },\n      ResetConsolidate: {\n        fa: \"buildings-update.png\"\n      },\n      UnlockUser: {\n        fa: \"unlock-user.png\"\n      },\n      UnlockTemplate: {\n        fa: \"security_unlock.png\"\n      },\n      ModalResult: {\n        fa: \"report_open-new.png\"\n      },\n      Returned: {\n        fa: \"returned.png\"\n      },\n      FormMaker: {\n        fa: \"form.png\"\n      },\n      CloseThis: {\n        fa: \"closethis.png\"\n      },\n      CloseAll: {\n        fa: \"closeall.png\"\n      },\n      CloseAllButThis: {\n        fa: \"closeallbutthis.png\"\n      },\n      CloseRight: {\n        fa: \"closeright.png\"\n      },\n      CloseLeft: {\n        fa: \"closeleft.png\"\n      },\n      ExportExcels: {\n        fa: \"exporttexcels.png\"\n      }\n    };\n    var item = array[key];\n    return item[\"fa\"];\n  };\n\n  var int2Hex = function int2Hex(i) {\n    var h = i.toString(16);\n\n    if (h.length == 1) {\n      h = '0' + h;\n    }\n\n    return h;\n  };\n\n  var st2Hex = function st2Hex(s) {\n    return int2Hex(Number(s));\n  };\n\n  var toHex3 = function toHex3(c) {\n    if (c.length > 10) {\n      // IE9\n      var p1 = 1 + c.indexOf('('),\n          p2 = c.indexOf(')'),\n          cs = c.substring(p1, p2).split(',');\n      return ['#', st2Hex(cs[0]), st2Hex(cs[1]), st2Hex(cs[2])].join('');\n    } else {\n      return c;\n    }\n  };\n\n  var cleanArray = function cleanArray(actual) {\n    var newArray = new Array();\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i]) {\n        newArray.push(actual[i]);\n      }\n    }\n\n    return newArray;\n  };\n\n  var jsonToStyle = function jsonToStyle(item) {\n    var style = \"\";\n    if (item.textColor && item.textColor !== \"\") style += \"color: \" + item.textColor + \";\";\n    if (item.backColor) style += \"background-color: \" + item.backColor + \";\";\n    if (item.textAlign) style += \"text-align: \" + item.textAlign + \";\";\n    if (item.textBold) style += \"font-weight: bold;\";\n    if (item.borderStyle) style += \"border-style: \" + item.borderStyle + \";\";\n    if (item.borderWidth) style += \"border-width: \" + item.borderWidth + \";\";\n    if (item.borderColor) style += \"border-color: \" + item.borderColor + \";\";\n    if (item.textFontFamily) style += \"font-family: \" + item.textFontFamily + \";\";\n    if (item.textFontSize) style += \"font-size: \" + item.textFontSize + \";\";\n    return style;\n  };\n\n  var template = function template(tpl, args) {\n    var keys = Object.keys(args),\n        fn = _construct(Function, _toConsumableArray(keys).concat(['return ` ' + tpl.replace(/`/g, '\\\\ ` ') + '`']));\n\n    return fn.apply(void 0, _toConsumableArray(keys.map(function (x) {\n      return \" \" + args[x];\n    })));\n  };\n\n  var arrayToObject = function arrayToObject(list) {\n    var object = {};\n\n    for (var i = 0; i < list.length; i++) {\n      object[list[i].key] = list[i].value;\n    }\n\n    return object;\n  };\n\n  var completeError = function completeError(message, error) {\n    if (message.indexOf(\"$\") === -1) return message;\n    return template(message, arrayToObject(error.keyValues));\n  };\n\n  var formatNumber = function formatNumber(number, removeSign) {\n    var decimalPart, numberPart;\n    number = ko.isObservable(number) ? number() : number;\n    if (number === null || number === undefined) return 0;\n\n    if (number.toString().indexOf(\".\") !== -1) {\n      numberPart = number.toString().split(\".\")[0];\n      decimalPart = number.toString().split(\".\")[1];\n      if (removeSign) return numberPart.toString().replace('-', '').replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + \".\" + decimalPart;else return numberPart.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + \".\" + decimalPart;\n    } else {\n      if (removeSign) return number.toString().replace('-', '').replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");else return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n    }\n  };\n\n  var isNumberNegative = function isNumberNegative(number) {\n    number = number.toString();\n    if (isNullOrEmpty(number) || number === \"\" || number === \"0\" || number.indexOf(\"-\") === -1) return false;\n    return true;\n  };\n\n  var timeAgo = function timeAgo(date) {\n    if (ko.isObservable(date)) {\n      if (date() !== null && date() !== undefined && date() !== \"\") return $.timeago(date());else return \"--\";\n    } else {\n      if (date !== null && date !== undefined && date !== \"\") return $.timeago(date);else return \"--\";\n    }\n  };\n\n  var anyFilters = function anyFilters(filters) {\n    if (any(filters)) {\n      var hasActiveFilter = false;\n\n      for (var i = 0; i < filters.length; i++) {\n        if (!isNullOrEmpty(filters[i].source) || filters[i].type && filters[i].type === \"text\") hasActiveFilter = true;\n      }\n\n      return hasActiveFilter;\n    }\n\n    return false;\n  };\n\n  var pixelToMm = function pixelToMm(val) {\n    return val * 0.2645833333;\n  };\n\n  var shortString = function shortString(text, limit) {\n    text = ko.isObservable(text) ? text() : text;\n\n    if (!isNullOrEmpty(text)) {\n      if (text.length < limit) return text;\n      return text.substr(0, limit - 3) + \"...\";\n    }\n\n    return \"\";\n  };\n\n  var getWidth = function getWidth(element) {\n    try {\n      return element.getBoundingClientRect().width;\n    } catch (e) {\n      return 0;\n    }\n  };\n\n  var getHeight = function getHeight(element) {\n    try {\n      return element.getBoundingClientRect().height;\n    } catch (e) {\n      return 0;\n    }\n  };\n\n  var getLogoType = function getLogoType(name) {\n    name = name.trim();\n    name = name.replace(\"شرکت\", \"\");\n    name = name.replace(\"گروه\", \"\");\n    name = name.trim().substring(0, 1);\n    if (name !== null && name !== undefined && name !== \"\") return name;\n    return \"آ\";\n  };\n\n  var generateTotalTableCaption = function generateTotalTableCaption(context) {\n    var phrase = \"\";\n    phrase += (context.pageNumber() - 1) * context.pageSize() + 1;\n    if (context.total() < 1) phrase = 0;\n    phrase += \" تا \";\n    var last = context.pageSize() * context.pageNumber();\n    if (last > context.total()) phrase += context.total();else phrase += last;\n    phrase += \" از \" + context.total() + \" رکورد\";\n    return phrase;\n  };\n\n  var splitStringList = function splitStringList(str, seprator) {\n    if (isNullOrEmpty(str) || str === \"\") return [];\n    if (isNullOrEmpty(seprator) || seprator === \"\") seprator = \",\";\n    var splites = str.split(seprator);\n    splites = cleanArray(splites);\n    return splites;\n  };\n\n  var concatStringList = function concatStringList(list, seprator) {\n    if (!list && list.length === 0) return \"\";\n    var phrase = \"\";\n\n    for (var i = 0; i < list.length; i++) {\n      if (list.length === i + 1) {\n        phrase += list[i];\n      } else {\n        phrase += list[i] + \",\";\n      }\n    }\n\n    return phrase;\n  };\n\n  var contains = function contains(set, val) {\n    var res = false;\n\n    for (var i = 0; i < set.length; i++) {\n      if (set[i] === val) res = true;\n    }\n\n    return res;\n  };\n\n  var splitMulti = function splitMulti(str, tokens) {\n    var tempChar = tokens[0];\n\n    for (var i = 1; i < tokens.length; i++) {\n      str = str.split(tokens[i]).join(tempChar);\n    }\n\n    str = str.split(tempChar);\n    return str;\n  };\n\n  var escapeRegExp = function escapeRegExp(str) {\n    return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n  };\n\n  var replaceAll = function replaceAll(str, find, replace) {\n    if (isNullOrEmpty(str) || str === \"\") return str;\n    return str.replace(new RegExp(find, 'g'), replace);\n  };\n\n  var tdOutput = function tdOutput(record, col, parents) {\n    var value,\n        className,\n        span = \"<span>\";\n\n    switch (col.type) {\n      case \"enum\":\n        value = getEnumText(window[col.name + 's'], record[col.name]());\n\n        if (value === null && col['enumSourceName']) {\n          value = getEnumText(window[col['enumSourceName']], record[col.name]());\n        }\n\n        if (value === null && col['enumSourceName'] === null) {\n          value = \"-\";\n        }\n\n        span = \"<span>\" + value + \"</span>\";\n        return span;\n\n      case \"template\":\n        value = record[col.name]();\n        span = \"<div class='awcheckbox awcheckbox-success awcheckbox-inline'><input type='checkbox' checked='\" + value + \"' id='\" + col.name + record.id() + \"'><label for='\" + col.name + record.id() + \" ></label></div>\";\n        return span;\n\n      case \"label\":\n        var item = getEnumItem(window[col.name + 's'], record[col.name]());\n\n        switch (item.color) {\n          case \"green\":\n            className = 'label label-success';\n            break;\n\n          case \"red\":\n            className = 'label label-danger';\n            break;\n\n          case \"orange\":\n            className = 'label label-warning';\n            break;\n\n          case \"blue\":\n            className = 'label label-info';\n            break;\n\n          case \"navy\":\n            className = 'label label-primary';\n            break;\n\n          case \"gray\":\n            className = 'label label-default';\n            break;\n\n          case \"none\":\n            className = 'label label-none';\n            break;\n\n          case \"\":\n            className = 'label label-none';\n            break;\n        }\n\n        span = \"<span class='\" + className + \"'>\" + item.text + \"</span>\";\n        return span;\n\n      case \"timeago\":\n        span = \"<span>\" + timeAgo(record[col.name]) + \"</span>\";\n        return span;\n\n      case \"pdatetime\":\n        span = \"<span style='unicode-bidi: plaintext;'>\" + dateHelper.formatPersianDateTime(record[col.name]) + \"</span>\";\n        return span;\n\n      case \"pdate\":\n        span = \"<span>\" + dateHelper.formatPersianDate(record[col.name]) + \"</span>\";\n        return span;\n\n      case \"money-abs\":\n        value = formatValue(record, col);\n        span = \"<span data-original-title='\" + formatNumber(Math.abs(value), true) + \"'>\" + formatNumber(Math.abs(value), true) + \"</span>\";\n        return span;\n\n      case \"money\":\n        value = formatValue(record, col);\n        span = \"<span data-original-title='\" + formatNumber(value, true) + \"'>\" + formatNumber(value, true) + \"</span>\";\n        return span;\n\n      case \"smoney\":\n        value = formatValue(record, col);\n        span = \"<span data-original-title='\" + formatNumber(value, false) + \"'>\" + formatNumber(value, false) + \"</span>\";\n        return span;\n\n      case 'stringdrag':\n        value = formatValue(record, col);\n        var id = ko.isObservable(record['id']) ? record['id']() : record['id'];\n        span = \"<span class='template-item ui-draggable ui-draggable-handle' data-id='\" + id + \"'>\" + value + \"</span>\";\n        return span;\n\n      case \"lstring\":\n        value = formatValue(record, col);\n        span = \"<span  style='unicode-bidi: plaintext;'>\" + value + \"</span>\";\n        return span;\n\n      case \"string\":\n        value = formatValue(record, col);\n        return \"<span style='unicode-bidi: plaintext;'>\" + value + \"</span>\";\n\n      case \"stateSwitch\":\n        var div;\n\n        if (record[col.name]() === true || record[col.name]() === 1) {\n          div = '<div class=\"onoffswitch\" style=\"margin-right: 20px;\">' + '<input type=\"checkbox\" name=\"state\" checked=\"checked\" class=\"onoffswitch-checkbox\">' + '<label class=\"onoffswitch-label\"></label></div>';\n        } else {\n          div = '<div class=\"onoffswitch\" style=\"margin-right: 20px;\">' + '<input type=\"checkbox\" name=\"state\" class=\"onoffswitch-checkbox\">' + '<label class=\"onoffswitch-label\"></label></div>';\n        }\n\n        return div;\n\n      case \"file\":\n        var index = Number(col.name);\n        value = record[index];\n        if (!value) return \"\";\n        value = getFileIcon(value);\n        var title = ko.isObservable(record[index]) ? record[index]() : record[index];\n        var div = '<a class=\"file-download-item\" title=\"' + title + '\" data-order=\"' + index + '\"><img class=\"icon-image-xsmall selectable\" style=\"vertical-align: middle;\" src=\"' + value + '\"/><a/>';\n        return div;\n        break;\n\n      case \"bool\":\n        value = formatValue(record, col);\n        if (value) span = \"<span  style='unicode-bidi: plaintext;'>بایگانی شده</span>\";else span = \"<span  style='unicode-bidi: plaintext;'>-</span>\";\n        return span;\n        break;\n    }\n  };\n\n  var getVm = function getVm(parents) {\n    if (parents[1][\"isVisibleColumn\"]) return parents[1];\n    return parents[2];\n  };\n\n  var formatValue = function formatValue(record, col) {\n    var value = ko.isObservable(record[col.name]) ? record[col.name]() : record[col.name];\n    if (value === null || value === \"null\" || value === undefined) return \"-\";\n    return value;\n  };\n\n  var clearNumber = function clearNumber(num) {\n    if (!num) return undefined;\n    return replaceAll(num, \",\", \"\");\n  };\n\n  var calDim = function calDim(val, fontSize, fontFamily, fontWeight) {\n    var test = document.getElementsByClassName(\"test-el\")[0];\n    test.style.fontSize = fontSize;\n    test.style.fontFamily = fontFamily;\n    test.style.fontWeight = fontWeight;\n    test.innerText = val;\n    var height = test.clientHeight + 1;\n    var width = test.clientWidth + 1;\n    test.innerText = \"\";\n    return [height, width];\n  };\n\n  var fixItemHeight = function fixItemHeight(id) {\n    var ul = document.getElementById(id);\n    if (!ul) return;\n    var liList = $(ul).find(\"li\");\n    var height = 0;\n\n    if (liList && liList.length > 0) {\n      for (var i = 0; i < liList.length; i++) {\n        var li = liList[i];\n        height += $(li).height();\n      }\n\n      if (height > 210 || liList.length > 7) {\n        $(ul).height(\"210px\");\n      } else {\n        $(ul).height(height + 22 + \"px\");\n      }\n    } else {\n      $(ul).height(\"10px\");\n    }\n  };\n\n  var createRandomNumber = function createRandomNumber() {\n    var min = Math.ceil(1);\n    var max = Math.floor(999999999);\n    return Math.floor(Math.random() * (max - min) + min);\n  };\n\n  var isEnglishKeyboard = function isEnglishKeyboard(input) {\n    var rtlChars = \"\\u0600-\\u06FF\";\n    rtlChars += \"\\u0750-\\u077F\";\n    rtlChars += \"\\uFB50-\\uFDFF\";\n    rtlChars += \"\\uFE70-\\uFEFF\";\n    var controlChars = \"\\0- \";\n    controlChars += \"\\u2000-\\u200D\";\n    var reRTL = new RegExp('^[' + controlChars + ']*[' + rtlChars + ']');\n    var reControl = new RegExp('^[' + controlChars + ']*$');\n    var value = input;\n    if (value === undefined) return false;\n\n    if (value.match(reRTL)) {\n      return false;\n    } else if (value.match(reControl)) {\n      return false;\n    } else {\n      return true;\n    }\n  };\n\n  var multiSplit = function multiSplit(str, delimiter) {\n    if (!(delimiter instanceof Array)) return str.split(delimiter);\n    if (!delimiter || delimiter.length == 0) return [str];\n    var hashSet = new Set(delimiter);\n    if (hashSet.has(\"\")) return str.split(\"\");\n    var lastIndex = 0;\n    var result = [];\n\n    for (var i = 0; i < str.length; i++) {\n      if (hashSet.has(str[i])) {\n        result.push(str.substring(lastIndex, i));\n        lastIndex = i + 1;\n      }\n    }\n\n    result.push(str.substring(lastIndex));\n    return result;\n  };\n\n  var shortName = function shortName(name, num) {\n    if (!num) num = 35;\n    if (name.length < num) return [name, false];\n    return [name.substr(0, num - 3) + \"...\", true];\n  };\n\n  var shortValue = function shortValue(val) {\n    return val.replace(\"-\", \"\");\n  };\n\n  var abs = function abs(val) {\n    return val.replace(\"-\", \"\");\n  };\n\n  var getPosition = function getPosition(el) {\n    var rect = el.getBoundingClientRect(),\n        scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,\n        scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;\n    var l, t, w, h, sw, sh, sbw, sbh;\n\n    if (el == document.body) {\n      l = 0;\n      t = 0;\n      w = document.body.clientWidth || document.documentElement.clientWidth || window.innerWidth; //don't change this order\n\n      h = document.body.clientHeight || document.documentElement.clientHeight || window.innerHeight; //don't change this order\n\n      sw = Math.max(document.body.scrollWidth, document.documentElement.scrollWidth);\n      sh = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n      sbw = document.documentElement.clientWidth - document.body.offsetWidth; //16\n\n      sbh = document.documentElement.clientHeight - document.body.offsetHeight; //16\n    } else {\n      l = rect.left + scrollLeft;\n      t = rect.top + scrollTop;\n      w = rect.right - rect.left;\n      h = rect.bottom - rect.top;\n      sw = el.scrollWidth;\n      sh = el.scrollHeight;\n      sbw = el.offsetWidth - el.clientWidth; //17\n\n      sbh = el.offsetHeight - el.clientHeight; //17\n    }\n\n    return {\n      left: l,\n      top: t,\n      width: w,\n      height: h,\n      right: l + w,\n      bottom: t + h,\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop,\n      scrollWidth: sw,\n      scrollHeight: sh\n    };\n  };\n\n  var periodSelectRowTemplate = function periodSelectRowTemplate(item) {\n    var temp = '<div>' + '<span class=\"item-title\">' + '<span class=\"item-name\">' + item.text + '</span></span>' + '<ul class=\"item-meta\">' + '<li class=\"item-type\">' + getEnumText(periodTypes, item.periodType) + \" - \" + getEnumText(periodStates, item.periodState) + \" - \" + getEnumText(auditStates, item.auditState);\n    if (item.description) temp += '<i class=\"dmn-info fa fa-info-circle\" title=\"' + item.description + '\"></i>';\n    temp += '</li></ul></div>';\n    return temp;\n  };\n\n  var tagSelectRowTemplate = function tagSelectRowTemplate(item) {\n    var temp = '<div style=\"padding: 3px;\">' + '<span class=\"item-title\">' + '<span class=\"item-name\">' + item.text + '</span>' + '</span>' + '<div class=\"label label-primary2 remove-tag\" style=\"float: left;padding-top: 4px;background-color: #ccc;\">حذف</div>' + '</div>';\n    return temp;\n  };\n\n  var activeTooltip = function activeTooltip(onlyVisible) {\n    if (!onlyVisible) {\n      var elements = $('[title]');\n      $(elements).tooltip({\n        placement: 'top'\n      });\n    } else {\n      $('[title]:visible').tooltip({\n        placement: 'top'\n      });\n    }\n  };\n\n  var removeDragLabel = function removeDragLabel() {\n    var div = document.getElementById('drag-label');\n    div.style.display = \"none\";\n  };\n\n  var toBase64 = function toBase64(file, callback) {\n    var reader = new FileReader();\n    reader.readAsDataURL(file);\n\n    reader.onload = function () {\n      callback(reader.result);\n    };\n\n    reader.onerror = function (error) {\n      callback(undefined);\n    };\n  };\n\n  var stringHasAlphabet = function stringHasAlphabet(str) {\n    var index;\n    var res = false;\n    var english = \" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+<>?|\\\\/\";\n\n    for (index = str.length - 1; index >= 0; --index) {\n      var x = str.substring(index, index + 1);\n\n      if (english.indexOf(x) > 0) {\n        res = true;\n      }\n    }\n\n    for (var i = 0, len = str.length; i < len; i++) {\n      var target = str[i];\n\n      if (/[^\\u0600-\\u06FF\\s]/g.test(target) === false) {\n        res = true;\n      }\n    }\n\n    return res;\n  };\n\n  var prop1Class = function prop1Class(data) {\n    switch (data.items[0]['t']) {\n      case \"rdo\":\n      case \"chk\":\n        return 'col-xs-12';\n\n      case \"tsp\":\n        if (data.items.length === 1) return 'form-full-line form-full-tuchpin-line col-xs-12';\n        if (data.items.length > 1) return 'form-line form-tuchpin-line  col-xs-6';\n        break;\n\n      default:\n        if (data.items.length === 1) return 'form-full-line col-xs-12';\n        if (data.items.length > 1) return 'form-line col-xs-6';\n    }\n  };\n\n  var prop2Class = function prop2Class(data) {\n    switch (data.items[1]['t']) {\n      case \"rdo\":\n      case \"chk\":\n        return 'col-xs-6';\n\n      case \"tsp\":\n        return 'form-line form-tuchpin-line  col-xs-6';\n\n      default:\n        return 'form-line col-xs-6';\n    }\n  };\n\n  var hasSpecialChar = function hasSpecialChar(str) {\n    if (!str) return false;\n    var res = false;\n\n    for (var i = 0; i < str.length; i++) {\n      if (/^[!@#\\$%\\^\\&*\\)\\(+=._-]+$/g.test(str[i])) res = true;\n    }\n\n    return res;\n  };\n\n  var adjustModalPosition = function adjustModalPosition(width, minWidth) {\n    var mb = $(\".modal-box\");\n    mb.css(\"width\", width);\n    var screenWidth = $(\"body\").width();\n    var modalWidth = mb.width();\n    var rest = (screenWidth - (modalWidth + 65)) / 2;\n    mb.css(\"left\", rest + \"px\");\n    if (minWidth) mb.css(\"min-width\", minWidth);\n  };\n\n  var getFileIcon = function getFileIcon(fileName) {\n    var value = ko.isObservable(fileName) ? fileName() : fileName;\n    var ext = getExtension(value);\n    var base = \"/App/src/images/ico/\";\n\n    switch (ext.toLowerCase()) {\n      case \"txt\":\n        return base + \"file_text.png\";\n\n      case \"xlsx\":\n      case \"xls\":\n        return base + \"file_excel.png\";\n\n      case \"html\":\n        return base + \"file_html.png\";\n\n      case \"csv\":\n        return base + \"file_csv.png\";\n\n      case \"pdf\":\n        return base + \"file_pdf.png\";\n\n      case \"png\":\n      case \"jpg\":\n      case \"jpeg\":\n        return base + \"file_image.png\";\n\n      case \"\":\n        return \"\";\n\n      default:\n        return base + \"file_txt.png\";\n    }\n  };\n\n  var normalizeAmpersand = function normalizeAmpersand(phrase) {\n    if (isEmpty(phrase)) return \"\";\n    if (typeof phrase !== \"string\" || phrase.indexOf(\"&&\") === -1) return phrase;\n    return replaceAll(phrase, \"&&\", \"\\\\u0026\\\\u0026\");\n  };\n\n  var findMinMaxCells = function findMinMaxCells(list) {\n    var minCol = Math.min.apply(Math, _toConsumableArray(list.map(function (item) {\n      return item.col;\n    })));\n    var minRow = Math.min.apply(Math, _toConsumableArray(list.map(function (item) {\n      return item.row;\n    })));\n    var maxCol = Math.max.apply(Math, _toConsumableArray(list.map(function (item) {\n      return item.col;\n    })));\n    var maxRow = Math.max.apply(Math, _toConsumableArray(list.map(function (item) {\n      return item.row;\n    })));\n    var minCell = list.filter(function (item) {\n      return item.col === minCol && item.row === minRow;\n    })[0];\n    var maxCell = list.filter(function (item) {\n      return item.col === maxCol && item.row === maxRow;\n    })[0];\n    return [minCell.address, maxCell.address];\n  };\n\n  var analyzeCells = function analyzeCells(list) {\n    var minCol = Math.min.apply(Math, _toConsumableArray(list.map(function (item) {\n      return item.col;\n    })));\n    var minRow = Math.min.apply(Math, _toConsumableArray(list.map(function (item) {\n      return item.row;\n    })));\n    var canShowChartOffline = list.filter(function (a) {\n      return !isNullOrEmpty(a.value);\n    }).length;\n    var series = list.filter(function (item) {\n      return item.row === minRow && item.col !== minCol;\n    }); // columns name\n\n    var categories = list.filter(function (item) {\n      return item.col === minCol && item.row !== minRow;\n    }); // rows name\n\n    var columns = series.map(function (v) {\n      return {\n        label: v.text,\n        address: v.address\n      };\n    });\n    var rows = categories.map(function (v) {\n      return {\n        label: v.text,\n        address: v.address\n      };\n    });\n    return [columns, rows, canShowChartOffline];\n  };\n\n  var downloadFile = function downloadFile(code) {\n    var url = \"/reports/downloadfile?code=\" + code;\n    window.open(url);\n  };\n\n  var clearHtmlTag = function clearHtmlTag(str) {\n    if (isEmpty(str)) return \"\";\n    return str.replace(/<\\/?[^>]+(>|$)/g, \"\");\n  };\n\n  var createNodeTooltip = function createNodeTooltip(str) {\n    var list = str.split('|');\n\n    var ul = _hh.createTag({\n      name: \"ul\",\n      attach: false,\n      className: \"none-style\",\n      styles: \"direction: rtl;\"\n    });\n\n    for (var i = 0; i < list.length; i++) {\n      var li = _hh.createTag({\n        name: \"li\",\n        parent: ul,\n        styles: \"font-size: 10px; font-weight: 400;\"\n      });\n\n      var divRow = _hh.createTag({\n        name: \"div\",\n        parent: li,\n        className: \"row m-b-m\"\n      });\n\n      var div = _hh.createTag({\n        name: \"div\",\n        parent: divRow,\n        className: \"col-lg-12\",\n        styles: \"margin-top: 11px;\"\n      });\n\n      _hh.createTag({\n        name: \"span\",\n        parent: div,\n        text: i + 1 + '- '\n      });\n\n      _hh.createTag({\n        name: \"span\",\n        parent: div,\n        text: list[i]\n      });\n    }\n\n    return ul;\n  };\n\n  var changeAft = function changeAft(val) {\n    if (val) document.getElementsByName(\"__RequestVerificationToken\")[0].value = val;\n  };\n\n  return {\n    changeAft: changeAft,\n    createNodeTooltip: createNodeTooltip,\n    clearHtmlTag: clearHtmlTag,\n    downloadFile: downloadFile,\n    findMinMaxCells: findMinMaxCells,\n    analyzeCells: analyzeCells,\n    normalizeAmpersand: normalizeAmpersand,\n    getFileIcon: getFileIcon,\n    adjustModalPosition: adjustModalPosition,\n    hasSpecialChar: hasSpecialChar,\n    prop2Class: prop2Class,\n    prop1Class: prop1Class,\n    stringHasAlphabet: stringHasAlphabet,\n    toBase64: toBase64,\n    findControllerName: findControllerName,\n    setSd: setSd,\n    getSd: getSd,\n    abs: abs,\n    abd: abd,\n    shortValue: shortValue,\n    shortName: shortName,\n    periodSelectRowTemplate: periodSelectRowTemplate,\n    emptyTextIfNull: emptyTextIfNull,\n    isEnglishKeyboard: isEnglishKeyboard,\n    getPosition: getPosition,\n    createRandomNumber: createRandomNumber,\n    fixItemHeight: fixItemHeight,\n    calDim: calDim,\n    removeDragLabel: removeDragLabel,\n    clearNumber: clearNumber,\n    tdOutput: tdOutput,\n    formatValue: formatValue,\n    replaceAll: replaceAll,\n    splitMulti: splitMulti,\n    escapeRegExp: escapeRegExp,\n    contains: contains,\n    concatStringList: concatStringList,\n    splitStringList: splitStringList,\n    generateTotalTableCaption: generateTotalTableCaption,\n    getLogoType: getLogoType,\n    getWidth: getWidth,\n    getHeight: getHeight,\n    shortString: shortString,\n    pixelToMm: pixelToMm,\n    timeAgo: timeAgo,\n    formatNumber: formatNumber,\n    isNumberNegative: isNumberNegative,\n    anyFilters: anyFilters,\n    completeError: completeError,\n    jsonToStyle: jsonToStyle,\n    cleanArray: cleanArray,\n    toHex3: toHex3,\n    getIcon: getIcon,\n    alphabetToNumber: alphabetToNumber,\n    numberToAlphabet: numberToAlphabet,\n    setAppSetting: setAppSetting,\n    getAppSetting: getAppSetting,\n    initResizeTable: resizeTable,\n    errorListHandler: errorListHandler,\n    warningListHandler: warningListHandler,\n    successListHandler: successListHandler,\n    formatTextIfNull: formatTextIfNull,\n    isNumeric: isNumeric,\n    isNullOrEmpty: isNullOrEmpty,\n    isEmpty: isEmpty,\n    isBigger: isBigger,\n    multiSplit: multiSplit,\n    tagSelectRowTemplate: tagSelectRowTemplate,\n    any: any,\n    confirmDeleteAlert: confirmDeleteAlert,\n    confirmTableTemplateAlert: confirmTableTemplateAlert,\n    confirmChooseAlert: confirmChooseAlert,\n    successToast: successToast,\n    failToast: failToast,\n    warningToast: warningToast,\n    getEnumText: getEnumText,\n    getEnumEnText: getEnumEnText,\n    getEnumItemByText: getEnumItemByText,\n    kocnx: kocnx,\n    getVm: getVm,\n    countBackNumberZero: countBackNumberZero,\n    getExtension: getExtension,\n    getApiMessage: getApiMessage,\n    generateUuid: generateUuid,\n    getLocalizedText: getLocalizedText,\n    findModelRes: findModelRes,\n    findPageRes: findPageRes,\n    getEnumItem: getEnumItem,\n    toggleChildren: toggleChildren,\n    fixLabelsSize: fixLabelsSize,\n    setUd: setUd,\n    getUd: getUd,\n    getTvm: getTvm,\n    backToLogin: backToLogin,\n    toggleDisableSections: toggleDisableSections,\n    buildTree: buildTree,\n    activeTooltip: activeTooltip\n  };\n}();\n\nArray.prototype.remove = function (val) {\n  for (var i = 0; i < this.length; i++) {\n    if (this[i] === val) {\n      this.splice(i, 1);\n      i--;\n    }\n  }\n\n  return this;\n};\n\n//# sourceURL=webpack://domino/./src/scripts/util/helper.js?");

/***/ }),

/***/ "./src/scripts/util/htmlHelper.js":
/*!****************************************!*\
  !*** ./src/scripts/util/htmlHelper.js ***!
  \****************************************/
/***/ ((module) => {

eval("var tagStack = {};\n\nmodule.exports = function () {\n  var hasClass = function hasClass(el, className) {\n    return el && el.classList && el.classList.contains(className);\n  };\n\n  var removeElement = function removeElement(el) {\n    el.parentNode.removeChild(el);\n  };\n\n  var getClosest = function getClosest(elem, selector) {\n    // Element.matches() polyfill\n    if (!Element.prototype.matches) {\n      Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {\n        var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n            i = matches.length;\n\n        while (--i >= 0 && matches.item(i) !== this) {}\n\n        return i > -1;\n      };\n    } // Get the closest matching element\n\n\n    for (; elem && elem !== document; elem = elem.parentNode) {\n      if (elem.matches(selector)) return elem;\n    }\n\n    return null;\n  };\n\n  var setClassName = function setClassName(element, className) {\n    element.className = className;\n  };\n\n  var setInnerHtml = function setInnerHtml(element, html) {\n    element.innerHTML = html;\n  };\n\n  var createElement = function createElement(tag, parent) {\n    var element = document.createElement(tag);\n    if (parent) parent.appendChild(element);\n    return element;\n  };\n\n  var createTag = function createTag(obj) {\n    var element = document.createElement(obj.name);\n    if (obj.className) element.className = obj.className;\n    if (obj.id) element.id = obj.id;\n    if (obj.styles) element.setAttribute(\"style\", obj.styles);else element.setAttribute(\"style\", \"\");\n    if (obj.text) element.innerText = obj.text;\n    if (obj.html) element.innerHTML = obj.html;\n    if (obj.value) element.value = obj.value;\n    if (obj.attributes) setAttributes(element, obj.attributes);\n\n    if (obj.attach !== false) {\n      if (obj.addBefore) obj.parent.prepend(element);else obj.parent.appendChild(element);\n    }\n\n    if (obj.onclick) element.onclick = obj.onclick;\n    if (obj.ondblclick) element.ondblclick = obj.ondblclick;\n\n    if (obj.children) {\n      for (var i = 0; i < obj.children.length; i++) {\n        obj.children[i].parent = element;\n        createTag(obj.children[i]);\n      }\n    }\n\n    return element;\n  };\n\n  var cloneTag = function cloneTag(obj) {\n    var element;\n    if (tagStack[obj.className]) element = tagStack[obj.className].cloneNode();else element = document.createElement(obj.name);\n    if (obj.className) element.className = obj.className;\n    if (obj.styles) element.setAttribute(\"style\", obj.styles);\n    if (obj.text) element.innerText = obj.text;\n    element.value = obj.value;\n    if (obj.attributes) setAttributes(element, obj.attributes);\n    obj.parent.appendChild(element);\n    if (!tagStack[obj.className]) tagStack[obj.className] = element;\n    return element;\n  };\n\n  var setAttributes = function setAttributes(el, args) {\n    for (var k in args) {\n      if (args.hasOwnProperty(k)) {\n        var val = args[k];\n        el.setAttribute(k, val);\n      }\n    }\n  };\n\n  return {\n    hasClass: hasClass,\n    removeElement: removeElement,\n    getClosest: getClosest,\n    setClassName: setClassName,\n    setInnerHtml: setInnerHtml,\n    createElement: createElement,\n    cloneTag: cloneTag,\n    createTag: createTag,\n    setAttributes: setAttributes\n  };\n}();\n\nArray.prototype.remove = function (val) {\n  for (var i = 0; i < this.length; i++) {\n    if (this[i] === val) {\n      this.splice(i, 1);\n      i--;\n    }\n  }\n\n  return this;\n};\n\n//# sourceURL=webpack://domino/./src/scripts/util/htmlHelper.js?");

/***/ }),

/***/ "./src/scripts/vendors/bootstrap.js":
/*!******************************************!*\
  !*** ./src/scripts/vendors/bootstrap.js ***!
  \******************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("/* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* provided dependency */ var _h = __webpack_require__(/*! ./src/scripts/util/helper.js */ \"./src/scripts/util/helper.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery');\n}\n\n+function ($) {\n  'use strict';\n\n  var version = $.fn.jquery.split(' ')[0].split('.'); //if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {\n  //  throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')\n  //}\n}(jQuery);\n+function ($) {\n  'use strict'; // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap');\n    var transEndEventNames = {\n      WebkitTransition: 'webkitTransitionEnd',\n      MozTransition: 'transitionend',\n      OTransition: 'oTransitionEnd otransitionend',\n      transition: 'transitionend'\n    };\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return {\n          end: transEndEventNames[name]\n        };\n      }\n    }\n\n    return false; // explicit for ie8 (  ._.)\n  } // http://blog.alexmaccaw.com/css-transitions\n\n\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false;\n    var $el = this;\n    $(this).one('bsTransitionEnd', function () {\n      called = true;\n    });\n\n    var callback = function callback() {\n      if (!called) $($el).trigger($.support.transition.end);\n    };\n\n    setTimeout(callback, duration);\n    return this;\n  };\n\n  $(function () {\n    $.support.transition = transitionEnd();\n    if (!$.support.transition) return;\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function handle(e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments);\n      }\n    };\n  });\n}(jQuery);\n+function ($) {\n  'use strict'; // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]';\n\n  var Alert = function Alert(el) {\n    $(el).on('click', dismiss, this.close);\n  };\n\n  Alert.VERSION = '3.3.6';\n  Alert.TRANSITION_DURATION = 150;\n\n  Alert.prototype.close = function (e) {\n    var $this = $(this);\n    var selector = $this.attr('data-target');\n\n    if (!selector) {\n      selector = $this.attr('href');\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n    }\n\n    var $parent = $(selector);\n    if (e) e.preventDefault();\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert');\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'));\n    if (e.isDefaultPrevented()) return;\n    $parent.removeClass('in');\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove();\n    }\n\n    $.support.transition && $parent.hasClass('fade') ? $parent.one('bsTransitionEnd', removeElement).emulateTransitionEnd(Alert.TRANSITION_DURATION) : removeElement();\n  }; // ALERT PLUGIN DEFINITION\n  // =======================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.alert');\n      if (!data) $this.data('bs.alert', data = new Alert(this));\n      if (typeof option == 'string') data[option].call($this);\n    });\n  }\n\n  var old = $.fn.alert;\n  $.fn.alert = Plugin;\n  $.fn.alert.Constructor = Alert; // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old;\n    return this;\n  }; // ALERT DATA-API\n  // ==============\n\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close);\n}(jQuery);\n+function ($) {\n  'use strict'; // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function Button(element, options) {\n    this.$element = $(element);\n    this.options = $.extend({}, Button.DEFAULTS, options);\n    this.isLoading = false;\n  };\n\n  Button.VERSION = '3.3.6';\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  };\n\n  Button.prototype.setState = function (state) {\n    var d = 'disabled';\n    var $el = this.$element;\n    var val = $el.is('input') ? 'val' : 'html';\n    var data = $el.data();\n    state += 'Text';\n    if (data.resetText == null) $el.data('resetText', $el[val]()); // push to event loop to allow forms to submit\n\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state]);\n\n      if (state == 'loadingText') {\n        this.isLoading = true;\n        $el.addClass(d).attr(d, d);\n      } else if (this.isLoading) {\n        this.isLoading = false;\n        $el.removeClass(d).removeAttr(d);\n      }\n    }, this), 0);\n  };\n\n  Button.prototype.toggle = function () {\n    var changed = true;\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]');\n\n    if ($parent.length) {\n      var $input = this.$element.find('input');\n\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false;\n        $parent.find('.active').removeClass('active');\n        this.$element.addClass('active');\n      } else if ($input.prop('type') == 'checkbox') {\n        if ($input.prop('checked') !== this.$element.hasClass('active')) changed = false;\n        this.$element.toggleClass('active');\n      }\n\n      $input.prop('checked', this.$element.hasClass('active'));\n      if (changed) $input.trigger('change');\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'));\n      this.$element.toggleClass('active');\n    }\n  }; // BUTTON PLUGIN DEFINITION\n  // ========================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.button');\n      var options = _typeof(option) == 'object' && option;\n      if (!data) $this.data('bs.button', data = new Button(this, options));\n      if (option == 'toggle') data.toggle();else if (option) data.setState(option);\n    });\n  }\n\n  var old = $.fn.button;\n  $.fn.button = Plugin;\n  $.fn.button.Constructor = Button; // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old;\n    return this;\n  }; // BUTTON DATA-API\n  // ===============\n\n\n  $(document).on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n    var $btn = $(e.target);\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn');\n    Plugin.call($btn, 'toggle');\n    if (!($(e.target).is('input[type=\"radio\"]') || $(e.target).is('input[type=\"checkbox\"]'))) e.preventDefault();\n  }).on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n    $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type));\n  });\n}(jQuery);\n+function ($) {\n  'use strict'; // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function Carousel(element, options) {\n    this.$element = $(element);\n    this.$indicators = this.$element.find('.carousel-indicators');\n    this.options = options;\n    this.paused = null;\n    this.sliding = null;\n    this.interval = null;\n    this.$active = null;\n    this.$items = null;\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this));\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element.on('mouseenter.bs.carousel', $.proxy(this.pause, this)).on('mouseleave.bs.carousel', $.proxy(this.cycle, this));\n  };\n\n  Carousel.VERSION = '3.3.6';\n  Carousel.TRANSITION_DURATION = 600;\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  };\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return;\n\n    switch (e.which) {\n      case 37:\n        this.prev();\n        break;\n\n      case 39:\n        this.next();\n        break;\n\n      default:\n        return;\n    }\n\n    e.preventDefault();\n  };\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false);\n    this.interval && clearInterval(this.interval);\n    this.options.interval && !this.paused && (this.interval = setInterval($.proxy(this.next, this), this.options.interval));\n    return this;\n  };\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item');\n    return this.$items.index(item || this.$active);\n  };\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active);\n    var willWrap = direction == 'prev' && activeIndex === 0 || direction == 'next' && activeIndex == this.$items.length - 1;\n    if (willWrap && !this.options.wrap) return active;\n    var delta = direction == 'prev' ? -1 : 1;\n    var itemIndex = (activeIndex + delta) % this.$items.length;\n    return this.$items.eq(itemIndex);\n  };\n\n  Carousel.prototype.to = function (pos) {\n    var that = this;\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'));\n    if (pos > this.$items.length - 1 || pos < 0) return;\n    if (this.sliding) return this.$element.one('slid.bs.carousel', function () {\n      that.to(pos);\n    }); // yes, \"slid\"\n\n    if (activeIndex == pos) return this.pause().cycle();\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos));\n  };\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true);\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end);\n      this.cycle(true);\n    }\n\n    this.interval = clearInterval(this.interval);\n    return this;\n  };\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return;\n    return this.slide('next');\n  };\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return;\n    return this.slide('prev');\n  };\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active = this.$element.find('.item.active');\n    var $next = next || this.getItemForDirection(type, $active);\n    var isCycling = this.interval;\n    var direction = type == 'next' ? 'left' : 'right';\n    var that = this;\n    if ($next.hasClass('active')) return this.sliding = false;\n    var relatedTarget = $next[0];\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    });\n    this.$element.trigger(slideEvent);\n    if (slideEvent.isDefaultPrevented()) return;\n    this.sliding = true;\n    isCycling && this.pause();\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active');\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]);\n      $nextIndicator && $nextIndicator.addClass('active');\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    }); // yes, \"slid\"\n\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type);\n      $next[0].offsetWidth; // force reflow\n\n      $active.addClass(direction);\n      $next.addClass(direction);\n      $active.one('bsTransitionEnd', function () {\n        $next.removeClass([type, direction].join(' ')).addClass('active');\n        $active.removeClass(['active', direction].join(' '));\n        that.sliding = false;\n        setTimeout(function () {\n          that.$element.trigger(slidEvent);\n        }, 0);\n      }).emulateTransitionEnd(Carousel.TRANSITION_DURATION);\n    } else {\n      $active.removeClass('active');\n      $next.addClass('active');\n      this.sliding = false;\n      this.$element.trigger(slidEvent);\n    }\n\n    isCycling && this.cycle();\n    return this;\n  }; // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.carousel');\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), _typeof(option) == 'object' && option);\n      var action = typeof option == 'string' ? option : options.slide;\n      if (!data) $this.data('bs.carousel', data = new Carousel(this, options));\n      if (typeof option == 'number') data.to(option);else if (action) data[action]();else if (options.interval) data.pause().cycle();\n    });\n  }\n\n  var old = $.fn.carousel;\n  $.fn.carousel = Plugin;\n  $.fn.carousel.Constructor = Carousel; // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old;\n    return this;\n  }; // CAROUSEL DATA-API\n  // =================\n\n\n  var clickHandler = function clickHandler(e) {\n    var href;\n    var $this = $(this);\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')); // strip for ie7\n\n    if (!$target.hasClass('carousel')) return;\n    var options = $.extend({}, $target.data(), $this.data());\n    var slideIndex = $this.attr('data-slide-to');\n    if (slideIndex) options.interval = false;\n    Plugin.call($target, options);\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex);\n    }\n\n    e.preventDefault();\n  };\n\n  $(document).on('click.bs.carousel.data-api', '[data-slide]', clickHandler).on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler);\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this);\n      Plugin.call($carousel, $carousel.data());\n    });\n  });\n}(jQuery);\n+function ($) {\n  'use strict'; // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function Collapse(element, options) {\n    this.$element = $(element);\n    this.options = $.extend({}, Collapse.DEFAULTS, options);\n    this.$trigger = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' + '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]');\n    this.transitioning = null;\n\n    if (this.options.parent) {\n      this.$parent = this.getParent();\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger);\n    }\n\n    if (this.options.toggle) this.toggle();\n  };\n\n  Collapse.VERSION = '3.3.6';\n  Collapse.TRANSITION_DURATION = 350;\n  Collapse.DEFAULTS = {\n    toggle: true\n  };\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width');\n    return hasWidth ? 'width' : 'height';\n  };\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return;\n    var activesData;\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing');\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse');\n      if (activesData && activesData.transitioning) return;\n    }\n\n    var startEvent = $.Event('show.bs.collapse');\n    this.$element.trigger(startEvent);\n    if (startEvent.isDefaultPrevented()) return;\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide');\n      activesData || actives.data('bs.collapse', null);\n    }\n\n    var dimension = this.dimension();\n    this.$element.removeClass('collapse').addClass('collapsing')[dimension](0).attr('aria-expanded', true);\n    this.$trigger.removeClass('collapsed').attr('aria-expanded', true);\n    this.transitioning = 1;\n\n    var complete = function complete() {\n      this.$element.removeClass('collapsing').addClass('collapse in')[dimension]('');\n      this.transitioning = 0;\n      this.$element.trigger('shown.bs.collapse');\n    };\n\n    if (!$.support.transition) return complete.call(this);\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'));\n    this.$element.one('bsTransitionEnd', $.proxy(complete, this)).emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]);\n  };\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return;\n    var startEvent = $.Event('hide.bs.collapse');\n    this.$element.trigger(startEvent);\n    if (startEvent.isDefaultPrevented()) return;\n    var dimension = this.dimension();\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight;\n    this.$element.addClass('collapsing').removeClass('collapse in').attr('aria-expanded', false);\n    this.$trigger.addClass('collapsed').attr('aria-expanded', false);\n    this.transitioning = 1;\n\n    var complete = function complete() {\n      this.transitioning = 0;\n      this.$element.removeClass('collapsing').addClass('collapse').trigger('hidden.bs.collapse');\n    };\n\n    if (!$.support.transition) return complete.call(this);\n    this.$element[dimension](0).one('bsTransitionEnd', $.proxy(complete, this)).emulateTransitionEnd(Collapse.TRANSITION_DURATION);\n  };\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']();\n  };\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]').each($.proxy(function (i, element) {\n      var $element = $(element);\n      this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element);\n    }, this)).end();\n  };\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in');\n    $element.attr('aria-expanded', isOpen);\n    $trigger.toggleClass('collapsed', !isOpen).attr('aria-expanded', isOpen);\n  };\n\n  function getTargetFromTrigger($trigger) {\n    var href;\n    var target = $trigger.attr('data-target') || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, ''); // strip for ie7\n\n    return $(target);\n  } // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.collapse');\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), _typeof(option) == 'object' && option);\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false;\n      if (!data) $this.data('bs.collapse', data = new Collapse(this, options));\n      if (typeof option == 'string') data[option]();\n    });\n  }\n\n  var old = $.fn.collapse;\n  $.fn.collapse = Plugin;\n  $.fn.collapse.Constructor = Collapse; // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old;\n    return this;\n  }; // COLLAPSE DATA-API\n  // =================\n\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this = $(this);\n    if (!$this.attr('data-target')) e.preventDefault();\n    var $target = getTargetFromTrigger($this);\n    var data = $target.data('bs.collapse');\n    var option = data ? 'toggle' : $this.data();\n    Plugin.call($target, option);\n  });\n}(jQuery);\n+function ($) {\n  'use strict'; // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop';\n  var toggle = '[data-toggle=\"dropdown\"]';\n\n  var Dropdown = function Dropdown(element) {\n    $(element).on('click.bs.dropdown', this.toggle);\n  };\n\n  Dropdown.VERSION = '3.3.6';\n\n  function getParent($this) {\n    var selector = $this.attr('data-target');\n\n    if (!selector) {\n      selector = $this.attr('href');\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n    }\n\n    var $parent = selector && $(selector);\n    return $parent && $parent.length ? $parent : $this.parent();\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return;\n    $(backdrop).remove();\n    $(toggle).each(function () {\n      var $this = $(this);\n      var $parent = getParent($this);\n      var relatedTarget = {\n        relatedTarget: this\n      };\n      if (!$parent.hasClass('open')) return;\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return;\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n      if (e.isDefaultPrevented()) return;\n      $this.attr('aria-expanded', 'false');\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget));\n    });\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this);\n    if ($this.is('.disabled, :disabled')) return;\n    var $parent = getParent($this);\n    var isActive = $parent.hasClass('open');\n    clearMenus();\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div')).addClass('dropdown-backdrop').insertAfter($(this)).on('click', clearMenus);\n      }\n\n      var relatedTarget = {\n        relatedTarget: this\n      };\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n      if (e.isDefaultPrevented()) return;\n      $this.trigger('focus').attr('aria-expanded', 'true');\n      $parent.toggleClass('open').trigger($.Event('shown.bs.dropdown', relatedTarget));\n    }\n\n    return false;\n  };\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;\n    var $this = $(this);\n    e.preventDefault();\n    e.stopPropagation();\n    if ($this.is('.disabled, :disabled')) return;\n    var $parent = getParent($this);\n    var isActive = $parent.hasClass('open');\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus');\n      return $this.trigger('click');\n    }\n\n    var desc = ' li:not(.disabled):visible a';\n    var $items = $parent.find('.dropdown-menu' + desc);\n    if (!$items.length) return;\n    var index = $items.index(e.target);\n    if (e.which == 38 && index > 0) index--; // up\n\n    if (e.which == 40 && index < $items.length - 1) index++; // down\n\n    if (!~index) index = 0;\n    $items.eq(index).trigger('focus');\n  }; // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.dropdown');\n      if (!data) $this.data('bs.dropdown', data = new Dropdown(this));\n      if (typeof option == 'string') data[option].call($this);\n    });\n  }\n\n  var old = $.fn.dropdown;\n  $.fn.dropdown = Plugin;\n  $.fn.dropdown.Constructor = Dropdown; // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old;\n    return this;\n  }; // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n\n  $(document).on('click.bs.dropdown.data-api', clearMenus).on('click.bs.dropdown.data-api', '.dropdown form', function (e) {\n    e.stopPropagation();\n  }).on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle).on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown).on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown);\n}(jQuery);\n+function ($) {\n  'use strict'; // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function Modal(element, options) {\n    this.options = options;\n    this.$body = $(document.body);\n    this.$element = $(element);\n    this.$dialog = this.$element.find('.modal-dialog');\n    this.$backdrop = null;\n    this.isShown = null;\n    this.originalBodyPad = null;\n    this.scrollbarWidth = 0;\n    this.ignoreBackdropClick = false;\n\n    if (this.options.remote) {\n      this.$element.find('.modal-content').load(this.options.remote, $.proxy(function () {\n        this.$element.trigger('loaded.bs.modal');\n      }, this));\n    }\n  };\n\n  Modal.VERSION = '3.3.6';\n  Modal.TRANSITION_DURATION = 300;\n  Modal.BACKDROP_TRANSITION_DURATION = 150;\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  };\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget);\n  };\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this;\n    var e = $.Event('show.bs.modal', {\n      relatedTarget: _relatedTarget\n    });\n    this.$element.trigger(e);\n    if (this.isShown || e.isDefaultPrevented()) return;\n    this.isShown = true;\n    this.checkScrollbar();\n    this.setScrollbar();\n    this.$body.addClass('modal-open');\n    this.escape();\n    this.resize();\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this));\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true;\n      });\n    });\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade');\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body); // don't move modals dom position\n      }\n\n      that.$element.show().scrollTop(0);\n      that.adjustDialog();\n\n      if (transition) {\n        that.$element[0].offsetWidth; // force reflow\n      }\n\n      that.$element.addClass('in');\n      that.enforceFocus();\n      var e = $.Event('shown.bs.modal', {\n        relatedTarget: _relatedTarget\n      });\n      transition ? that.$dialog // wait for modal to slide in\n      .one('bsTransitionEnd', function () {\n        that.$element.trigger('focus').trigger(e);\n      }).emulateTransitionEnd(Modal.TRANSITION_DURATION) : that.$element.trigger('focus').trigger(e);\n    });\n  };\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault();\n    e = $.Event('hide.bs.modal');\n    this.$element.trigger(e);\n    if (!this.isShown || e.isDefaultPrevented()) return;\n    this.isShown = false;\n    this.escape();\n    this.resize();\n    $(document).off('focusin.bs.modal');\n    this.$element.removeClass('in').off('click.dismiss.bs.modal').off('mouseup.dismiss.bs.modal');\n    this.$dialog.off('mousedown.dismiss.bs.modal');\n    $.support.transition && this.$element.hasClass('fade') ? this.$element.one('bsTransitionEnd', $.proxy(this.hideModal, this)).emulateTransitionEnd(Modal.TRANSITION_DURATION) : this.hideModal();\n  };\n\n  Modal.prototype.enforceFocus = function () {\n    $(document).off('focusin.bs.modal') // guard against infinite focus loop\n    .on('focusin.bs.modal', $.proxy(function (e) {\n      if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n        this.$element.trigger('focus');\n      }\n    }, this));\n  };\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide();\n      }, this));\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal');\n    }\n  };\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this));\n    } else {\n      $(window).off('resize.bs.modal');\n    }\n  };\n\n  Modal.prototype.hideModal = function () {\n    var that = this;\n    this.$element.hide();\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open');\n      that.resetAdjustments();\n      that.resetScrollbar();\n      that.$element.trigger('hidden.bs.modal');\n    });\n  };\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove();\n    this.$backdrop = null;\n  };\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this;\n    var animate = this.$element.hasClass('fade') ? 'fade' : '';\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate;\n      this.$backdrop = $(document.createElement('div')).addClass('modal-backdrop ' + animate).appendTo(this.$body);\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false;\n          return;\n        }\n\n        if (e.target !== e.currentTarget) return;\n        this.options.backdrop == 'static' ? this.$element[0].focus() : this.hide();\n      }, this));\n      if (doAnimate) this.$backdrop[0].offsetWidth; // force reflow\n\n      this.$backdrop.addClass('in');\n      if (!callback) return;\n      doAnimate ? this.$backdrop.one('bsTransitionEnd', callback).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callback();\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in');\n\n      var callbackRemove = function callbackRemove() {\n        that.removeBackdrop();\n        callback && callback();\n      };\n\n      $.support.transition && this.$element.hasClass('fade') ? this.$backdrop.one('bsTransitionEnd', callbackRemove).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callbackRemove();\n    } else if (callback) {\n      callback();\n    }\n  }; // these following methods are used to handle overflowing modals\n\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog();\n  };\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight;\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    });\n  };\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    });\n  };\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth;\n\n    if (!fullWindowWidth) {\n      // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect();\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n    }\n\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth;\n    this.scrollbarWidth = this.measureScrollbar();\n  };\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt(this.$body.css('padding-right') || 0, 10);\n    this.originalBodyPad = document.body.style.paddingRight || '';\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth);\n  };\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad);\n  };\n\n  Modal.prototype.measureScrollbar = function () {\n    // thx walsh\n    var scrollDiv = document.createElement('div');\n    scrollDiv.className = 'modal-scrollbar-measure';\n    this.$body.append(scrollDiv);\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n    this.$body[0].removeChild(scrollDiv);\n    return scrollbarWidth;\n  }; // MODAL PLUGIN DEFINITION\n  // =======================\n\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.modal');\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), _typeof(option) == 'object' && option);\n      if (!data) $this.data('bs.modal', data = new Modal(this, options));\n      if (typeof option == 'string') data[option](_relatedTarget);else if (options.show) data.show(_relatedTarget);\n    });\n  }\n\n  var old = $.fn.modal;\n  $.fn.modal = Plugin;\n  $.fn.modal.Constructor = Modal; // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old;\n    return this;\n  }; // MODAL DATA-API\n  // ==============\n\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this);\n    var href = $this.attr('href');\n    var $target = $($this.attr('data-target') || href && href.replace(/.*(?=#[^\\s]+$)/, '')); // strip for ie7\n\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({\n      remote: !/#/.test(href) && href\n    }, $target.data(), $this.data());\n    if ($this.is('a')) e.preventDefault();\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return; // only register focus restorer if modal will actually get shown\n\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus');\n      });\n    });\n    Plugin.call($target, option, this);\n  });\n}(jQuery);\n+function ($) {\n  'use strict'; // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function Tooltip(element, options) {\n    this.type = null;\n    this.options = null;\n    this.enabled = null;\n    this.timeout = null;\n    this.hoverState = null;\n    this.$element = null;\n    this.inState = null;\n    this.init('tooltip', element, options);\n  };\n\n  Tooltip.VERSION = '3.3.6';\n  Tooltip.TRANSITION_DURATION = 150;\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  };\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled = true;\n    this.type = type;\n    this.$element = $(element);\n    this.options = this.getOptions(options);\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport);\n    this.inState = {\n      click: false,\n      hover: false,\n      focus: false\n    };\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!');\n    }\n\n    var triggers = this.options.trigger.split(' ');\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i];\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this));\n      } else if (trigger != 'manual') {\n        var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin';\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout';\n        this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this));\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this));\n      }\n    }\n\n    this.options.selector ? this._options = $.extend({}, this.options, {\n      trigger: 'manual',\n      selector: ''\n    }) : this.fixTitle();\n  };\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS;\n  };\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options);\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      };\n    }\n\n    return options;\n  };\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options = {};\n    var defaults = this.getDefaults();\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value;\n    });\n    return options;\n  };\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type);\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions());\n      $(obj.currentTarget).data('bs.' + this.type, self);\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true;\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in';\n      return;\n    }\n\n    clearTimeout(self.timeout);\n    self.hoverState = 'in';\n    if (!self.options.delay || !self.options.delay.show) return self.show();\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show();\n    }, self.options.delay.show);\n  };\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true;\n    }\n\n    return false;\n  };\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type);\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions());\n      $(obj.currentTarget).data('bs.' + this.type, self);\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false;\n    }\n\n    if (self.isInStateTrue()) return;\n    clearTimeout(self.timeout);\n    self.hoverState = 'out';\n    if (!self.options.delay || !self.options.delay.hide) return self.hide();\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide();\n    }, self.options.delay.hide);\n  };\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type);\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e);\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);\n      if (e.isDefaultPrevented() || !inDom) return;\n      var that = this;\n      var $tip = this.tip();\n      var tipId = this.getUID(this.type);\n      this.setContent();\n      $tip.attr('id', tipId);\n      this.$element.attr('aria-describedby', tipId);\n      if (this.options.animation) $tip.addClass('fade');\n      var placement = typeof this.options.placement == 'function' ? this.options.placement.call(this, $tip[0], this.$element[0]) : this.options.placement;\n      var autoToken = /\\s?auto?\\s?/i;\n      var autoPlace = autoToken.test(placement);\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top';\n      $tip.detach().css({\n        top: 0,\n        left: 0,\n        display: 'block'\n      }).addClass(placement).data('bs.' + this.type, this);\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element);\n      this.$element.trigger('inserted.bs.' + this.type);\n      var pos = this.getPosition();\n      var actualWidth = $tip[0].offsetWidth;\n      var actualHeight = $tip[0].offsetHeight;\n\n      if (autoPlace) {\n        var orgPlacement = placement;\n        var viewportDim = this.getPosition(this.$viewport);\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : placement;\n        $tip.removeClass(orgPlacement).addClass(placement);\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight);\n      this.applyPlacement(calculatedOffset, placement);\n\n      var complete = function complete() {\n        var prevHoverState = that.hoverState;\n        that.$element.trigger('shown.bs.' + that.type);\n        that.hoverState = null;\n        if (prevHoverState == 'out') that.leave(that);\n      };\n\n      $.support.transition && this.$tip.hasClass('fade') ? $tip.one('bsTransitionEnd', complete).emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : complete();\n    }\n  };\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip = this.tip();\n    var width = $tip[0].offsetWidth;\n    var height = $tip[0].offsetHeight; // manually read margins because getBoundingClientRect includes difference\n\n    var marginTop = parseInt($tip.css('margin-top'), 10);\n    var marginLeft = parseInt($tip.css('margin-left'), 10); // we must check for NaN for ie 8/9\n\n    if (isNaN(marginTop)) marginTop = 0;\n    if (isNaN(marginLeft)) marginLeft = 0;\n    offset.top += marginTop;\n    offset.left += marginLeft; // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n\n    $.offset.setOffset($tip[0], $.extend({\n      using: function using(props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        });\n      }\n    }, offset), 0);\n    $tip.addClass('in'); // check to see if placing tip in new offset caused the tip to resize itself\n\n    var actualWidth = $tip[0].offsetWidth;\n    var actualHeight = $tip[0].offsetHeight;\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight;\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight);\n    if (delta.left) offset.left += delta.left;else offset.top += delta.top;\n    var isVertical = /top|bottom/.test(placement);\n    var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight;\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight';\n    $tip.offset(offset);\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical);\n  };\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow().css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%').css(isVertical ? 'top' : 'left', '');\n  };\n\n  Tooltip.prototype.setContent = function () {\n    var $tip = this.tip();\n    var title = this.getTitle();\n\n    if ((title !== null && title !== void 0 ? title : \"\").includes(\"=>\")) {\n      var htmlContent = _h.createNodeTooltip(title);\n\n      $tip.find('.tooltip-inner')['html'](htmlContent);\n    } else {\n      $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title);\n    }\n\n    $tip.removeClass('fade in top bottom left right');\n  };\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this;\n    var $tip = $(this.$tip);\n    var e = $.Event('hide.bs.' + this.type);\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach();\n      that.$element.removeAttr('aria-describedby').trigger('hidden.bs.' + that.type);\n      callback && callback();\n    }\n\n    this.$element.trigger(e);\n    if (e.isDefaultPrevented()) return;\n    $tip.removeClass('in');\n    $.support.transition && $tip.hasClass('fade') ? $tip.one('bsTransitionEnd', complete).emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : complete();\n    this.hoverState = null;\n    return this;\n  };\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element;\n\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '');\n    }\n  };\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle();\n  };\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element = $element || this.$element;\n    var el = $element[0];\n    var isBody = el.tagName == 'BODY';\n    var elRect = el.getBoundingClientRect();\n\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, {\n        width: elRect.right - elRect.left,\n        height: elRect.bottom - elRect.top\n      });\n    }\n\n    var elOffset = isBody ? {\n      top: 0,\n      left: 0\n    } : $element.offset();\n    var scroll = {\n      scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop()\n    };\n    var outerDims = isBody ? {\n      width: $(window).width(),\n      height: $(window).height()\n    } : null;\n    return $.extend({}, elRect, scroll, outerDims, elOffset);\n  };\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? {\n      top: pos.top + pos.height,\n      left: pos.left + pos.width / 2 - actualWidth / 2\n    } : placement == 'top' ? {\n      top: pos.top - actualHeight,\n      left: pos.left + pos.width / 2 - actualWidth / 2\n    } : placement == 'left' ? {\n      top: pos.top + pos.height / 2 - actualHeight / 2,\n      left: pos.left - actualWidth\n    } :\n    /* placement == 'right' */\n    {\n      top: pos.top + pos.height / 2 - actualHeight / 2,\n      left: pos.left + pos.width\n    };\n  };\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = {\n      top: 0,\n      left: 0\n    };\n    if (!this.$viewport) return delta;\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0;\n    var viewportDimensions = this.getPosition(this.$viewport);\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll;\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight;\n\n      if (topEdgeOffset < viewportDimensions.top) {\n        // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset;\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) {\n        // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset;\n      }\n    } else {\n      var leftEdgeOffset = pos.left - viewportPadding;\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth;\n\n      if (leftEdgeOffset < viewportDimensions.left) {\n        // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset;\n      } else if (rightEdgeOffset > viewportDimensions.right) {\n        // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset;\n      }\n    }\n\n    return delta;\n  };\n\n  Tooltip.prototype.getTitle = function () {\n    var title;\n    var $e = this.$element;\n    var o = this.options;\n    title = $e.attr('data-original-title') || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title);\n    return title;\n  };\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do {\n      prefix += ~~(Math.random() * 1000000);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template);\n\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!');\n      }\n    }\n\n    return this.$tip;\n  };\n\n  Tooltip.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow');\n  };\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true;\n  };\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false;\n  };\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled;\n  };\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this;\n\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type);\n\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions());\n        $(e.currentTarget).data('bs.' + this.type, self);\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click;\n      if (self.isInStateTrue()) self.enter(self);else self.leave(self);\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self);\n    }\n  };\n\n  Tooltip.prototype.destroy = function () {\n    var that = this;\n    clearTimeout(this.timeout);\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type);\n\n      if (that.$tip) {\n        that.$tip.detach();\n      }\n\n      that.$tip = null;\n      that.$arrow = null;\n      that.$viewport = null;\n    });\n  }; // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.tooltip');\n      var options = _typeof(option) == 'object' && option;\n      if (!data && /destroy|hide/.test(option)) return;\n      if (!data) $this.data('bs.tooltip', data = new Tooltip(this, options));\n      if (typeof option == 'string') data[option]();\n    });\n  }\n\n  var old = $.fn.tooltip;\n  $.fn.tooltip = Plugin;\n  $.fn.tooltip.Constructor = Tooltip; // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old;\n    return this;\n  };\n}(jQuery);\n+function ($) {\n  'use strict'; // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function Popover(element, options) {\n    this.init('popover', element, options);\n  };\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js');\n  Popover.VERSION = '3.3.6';\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  }); // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype);\n  Popover.prototype.constructor = Popover;\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS;\n  };\n\n  Popover.prototype.setContent = function () {\n    var $tip = this.tip();\n    var title = this.getTitle();\n    var content = this.getContent();\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title);\n    $tip.find('.popover-content').children().detach().end()[// we use append for html objects to maintain js events\n    this.options.html ? typeof content == 'string' ? 'html' : 'append' : 'text'](content);\n    $tip.removeClass('fade top bottom left right in'); // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide();\n  };\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent();\n  };\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element;\n    var o = this.options;\n    return $e.attr('data-content') || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content);\n  };\n\n  Popover.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.arrow');\n  }; // POPOVER PLUGIN DEFINITION\n  // =========================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.popover');\n      var options = _typeof(option) == 'object' && option;\n      if (!data && /destroy|hide/.test(option)) return;\n      if (!data) $this.data('bs.popover', data = new Popover(this, options));\n      if (typeof option == 'string') data[option]();\n    });\n  }\n\n  var old = $.fn.popover;\n  $.fn.popover = Plugin;\n  $.fn.popover.Constructor = Popover; // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old;\n    return this;\n  };\n}(jQuery);\n+function ($) {\n  'use strict'; // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body = $(document.body);\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element);\n    this.options = $.extend({}, ScrollSpy.DEFAULTS, options);\n    this.selector = (this.options.target || '') + ' .nav li > a';\n    this.offsets = [];\n    this.targets = [];\n    this.activeTarget = null;\n    this.scrollHeight = 0;\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this));\n    this.refresh();\n    this.process();\n  }\n\n  ScrollSpy.VERSION = '3.3.6';\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  };\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight);\n  };\n\n  ScrollSpy.prototype.refresh = function () {\n    var that = this;\n    var offsetMethod = 'offset';\n    var offsetBase = 0;\n    this.offsets = [];\n    this.targets = [];\n    this.scrollHeight = this.getScrollHeight();\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position';\n      offsetBase = this.$scrollElement.scrollTop();\n    }\n\n    this.$body.find(this.selector).map(function () {\n      var $el = $(this);\n      var href = $el.data('target') || $el.attr('href');\n      var $href = /^#./.test(href) && $(href);\n      return $href && $href.length && $href.is(':visible') && [[$href[offsetMethod]().top + offsetBase, href]] || null;\n    }).sort(function (a, b) {\n      return a[0] - b[0];\n    }).each(function () {\n      that.offsets.push(this[0]);\n      that.targets.push(this[1]);\n    });\n  };\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop = this.$scrollElement.scrollTop() + this.options.offset;\n    var scrollHeight = this.getScrollHeight();\n    var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height();\n    var offsets = this.offsets;\n    var targets = this.targets;\n    var activeTarget = this.activeTarget;\n    var i;\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i);\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null;\n      return this.clear();\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i] && scrollTop >= offsets[i] && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) && this.activate(targets[i]);\n    }\n  };\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target;\n    this.clear();\n    var selector = this.selector + '[data-target=\"' + target + '\"],' + this.selector + '[href=\"' + target + '\"]';\n    var active = $(selector).parents('li').addClass('active');\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active.closest('li.dropdown').addClass('active');\n    }\n\n    active.trigger('activate.bs.scrollspy');\n  };\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector).parentsUntil(this.options.target, '.active').removeClass('active');\n  }; // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.scrollspy');\n      var options = _typeof(option) == 'object' && option;\n      if (!data) $this.data('bs.scrollspy', data = new ScrollSpy(this, options));\n      if (typeof option == 'string') data[option]();\n    });\n  }\n\n  var old = $.fn.scrollspy;\n  $.fn.scrollspy = Plugin;\n  $.fn.scrollspy.Constructor = ScrollSpy; // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old;\n    return this;\n  }; // SCROLLSPY DATA-API\n  // ==================\n\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this);\n      Plugin.call($spy, $spy.data());\n    });\n  });\n}(jQuery);\n+function ($) {\n  'use strict'; // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function Tab(element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element); // jscs:enable requireDollarBeforejQueryAssignment\n  };\n\n  Tab.VERSION = '3.3.6';\n  Tab.TRANSITION_DURATION = 150;\n\n  Tab.prototype.show = function () {\n    var $this = this.element;\n    var $ul = $this.closest('ul:not(.dropdown-menu)');\n    var selector = $this.data('target');\n\n    if (!selector) {\n      selector = $this.attr('href');\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return;\n    var $previous = $ul.find('.active:last a');\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    });\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    });\n    $previous.trigger(hideEvent);\n    $this.trigger(showEvent);\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return;\n    var $target = $(selector);\n    this.activate($this.closest('li'), $ul);\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      });\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      });\n    });\n  };\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active = container.find('> .active');\n    var transition = callback && $.support.transition && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length);\n\n    function next() {\n      $active.removeClass('active').find('> .dropdown-menu > .active').removeClass('active').end().find('[data-toggle=\"tab\"]').attr('aria-expanded', false);\n      element.addClass('active').find('[data-toggle=\"tab\"]').attr('aria-expanded', true);\n\n      if (transition) {\n        element[0].offsetWidth; // reflow for transition\n\n        element.addClass('in');\n      } else {\n        element.removeClass('fade');\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element.closest('li.dropdown').addClass('active').end().find('[data-toggle=\"tab\"]').attr('aria-expanded', true);\n      }\n\n      callback && callback();\n    }\n\n    $active.length && transition ? $active.one('bsTransitionEnd', next).emulateTransitionEnd(Tab.TRANSITION_DURATION) : next();\n    $active.removeClass('in');\n  }; // TAB PLUGIN DEFINITION\n  // =====================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.tab');\n      if (!data) $this.data('bs.tab', data = new Tab(this));\n      if (typeof option == 'string') data[option]();\n    });\n  }\n\n  var old = $.fn.tab;\n  $.fn.tab = Plugin;\n  $.fn.tab.Constructor = Tab; // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old;\n    return this;\n  }; // TAB DATA-API\n  // ============\n\n\n  var clickHandler = function clickHandler(e) {\n    e.preventDefault();\n    Plugin.call($(this), 'show');\n  };\n\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler).on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler);\n}(jQuery);\n+function ($) {\n  'use strict'; // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function Affix(element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options);\n    this.$target = $(this.options.target).on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)).on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this));\n    this.$element = $(element);\n    this.affixed = null;\n    this.unpin = null;\n    this.pinnedOffset = null;\n    this.checkPosition();\n  };\n\n  Affix.VERSION = '3.3.6';\n  Affix.RESET = 'affix affix-top affix-bottom';\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  };\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop = this.$target.scrollTop();\n    var position = this.$element.offset();\n    var targetHeight = this.$target.height();\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false;\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return scrollTop + this.unpin <= position.top ? false : 'bottom';\n      return scrollTop + targetHeight <= scrollHeight - offsetBottom ? false : 'bottom';\n    }\n\n    var initializing = this.affixed == null;\n    var colliderTop = initializing ? scrollTop : position.top;\n    var colliderHeight = initializing ? targetHeight : height;\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top';\n    if (offsetBottom != null && colliderTop + colliderHeight >= scrollHeight - offsetBottom) return 'bottom';\n    return false;\n  };\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset;\n    this.$element.removeClass(Affix.RESET).addClass('affix');\n    var scrollTop = this.$target.scrollTop();\n    var position = this.$element.offset();\n    return this.pinnedOffset = position.top - scrollTop;\n  };\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1);\n  };\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return;\n    var height = this.$element.height();\n    var offset = this.options.offset;\n    var offsetTop = offset.top;\n    var offsetBottom = offset.bottom;\n    var scrollHeight = Math.max($(document).height(), $(document.body).height());\n    if (_typeof(offset) != 'object') offsetBottom = offsetTop = offset;\n    if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element);\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element);\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom);\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '');\n      var affixType = 'affix' + (affix ? '-' + affix : '');\n      var e = $.Event(affixType + '.bs.affix');\n      this.$element.trigger(e);\n      if (e.isDefaultPrevented()) return;\n      this.affixed = affix;\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null;\n      this.$element.removeClass(Affix.RESET).addClass(affixType).trigger(affixType.replace('affix', 'affixed') + '.bs.affix');\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      });\n    }\n  }; // AFFIX PLUGIN DEFINITION\n  // =======================\n\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.affix');\n      var options = _typeof(option) == 'object' && option;\n      if (!data) $this.data('bs.affix', data = new Affix(this, options));\n      if (typeof option == 'string') data[option]();\n    });\n  }\n\n  var old = $.fn.affix;\n  $.fn.affix = Plugin;\n  $.fn.affix.Constructor = Affix; // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old;\n    return this;\n  }; // AFFIX DATA-API\n  // ==============\n\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this);\n      var data = $spy.data();\n      data.offset = data.offset || {};\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom;\n      if (data.offsetTop != null) data.offset.top = data.offsetTop;\n      Plugin.call($spy, data);\n    });\n  });\n}(jQuery);\n\n//# sourceURL=webpack://domino/./src/scripts/vendors/bootstrap.js?");

/***/ }),

/***/ "./src/scripts/vendors/jquery-ui.min.js":
/*!**********************************************!*\
  !*** ./src/scripts/vendors/jquery-ui.min.js ***!
  \**********************************************/
/***/ ((module, exports, __webpack_require__) => {

eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (t) {\n   true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;\n})(function (t) {\n  t.ui = t.ui || {}, t.ui.version = \"1.12.1\";\n  var e = 0,\n      i = Array.prototype.slice;\n  t.cleanData = function (e) {\n    return function (i) {\n      var s, n, o;\n\n      for (o = 0; null != (n = i[o]); o++) {\n        try {\n          s = t._data(n, \"events\"), s && s.remove && t(n).triggerHandler(\"remove\");\n        } catch (a) {}\n      }\n\n      e(i);\n    };\n  }(t.cleanData), t.widget = function (e, i, s) {\n    var n,\n        o,\n        a,\n        r = {},\n        h = e.split(\".\")[0];\n    e = e.split(\".\")[1];\n    var l = h + \"-\" + e;\n    return s || (s = i, i = t.Widget), t.isArray(s) && (s = t.extend.apply(null, [{}].concat(s))), t.expr[\":\"][l.toLowerCase()] = function (e) {\n      return !!t.data(e, l);\n    }, t[h] = t[h] || {}, n = t[h][e], o = t[h][e] = function (t, e) {\n      return this._createWidget ? (arguments.length && this._createWidget(t, e), void 0) : new o(t, e);\n    }, t.extend(o, n, {\n      version: s.version,\n      _proto: t.extend({}, s),\n      _childConstructors: []\n    }), a = new i(), a.options = t.widget.extend({}, a.options), t.each(s, function (e, s) {\n      return t.isFunction(s) ? (r[e] = function () {\n        function t() {\n          return i.prototype[e].apply(this, arguments);\n        }\n\n        function n(t) {\n          return i.prototype[e].apply(this, t);\n        }\n\n        return function () {\n          var e,\n              i = this._super,\n              o = this._superApply;\n          return this._super = t, this._superApply = n, e = s.apply(this, arguments), this._super = i, this._superApply = o, e;\n        };\n      }(), void 0) : (r[e] = s, void 0);\n    }), o.prototype = t.widget.extend(a, {\n      widgetEventPrefix: n ? a.widgetEventPrefix || e : e\n    }, r, {\n      constructor: o,\n      namespace: h,\n      widgetName: e,\n      widgetFullName: l\n    }), n ? (t.each(n._childConstructors, function (e, i) {\n      var s = i.prototype;\n      t.widget(s.namespace + \".\" + s.widgetName, o, i._proto);\n    }), delete n._childConstructors) : i._childConstructors.push(o), t.widget.bridge(e, o), o;\n  }, t.widget.extend = function (e) {\n    for (var s, n, o = i.call(arguments, 1), a = 0, r = o.length; r > a; a++) {\n      for (s in o[a]) {\n        n = o[a][s], o[a].hasOwnProperty(s) && void 0 !== n && (e[s] = t.isPlainObject(n) ? t.isPlainObject(e[s]) ? t.widget.extend({}, e[s], n) : t.widget.extend({}, n) : n);\n      }\n    }\n\n    return e;\n  }, t.widget.bridge = function (e, s) {\n    var n = s.prototype.widgetFullName || e;\n\n    t.fn[e] = function (o) {\n      var a = \"string\" == typeof o,\n          r = i.call(arguments, 1),\n          h = this;\n      return a ? this.length || \"instance\" !== o ? this.each(function () {\n        var i,\n            s = t.data(this, n);\n        return \"instance\" === o ? (h = s, !1) : s ? t.isFunction(s[o]) && \"_\" !== o.charAt(0) ? (i = s[o].apply(s, r), i !== s && void 0 !== i ? (h = i && i.jquery ? h.pushStack(i.get()) : i, !1) : void 0) : t.error(\"no such method '\" + o + \"' for \" + e + \" widget instance\") : t.error(\"cannot call methods on \" + e + \" prior to initialization; \" + \"attempted to call method '\" + o + \"'\");\n      }) : h = void 0 : (r.length && (o = t.widget.extend.apply(null, [o].concat(r))), this.each(function () {\n        var e = t.data(this, n);\n        e ? (e.option(o || {}), e._init && e._init()) : t.data(this, n, new s(o, this));\n      })), h;\n    };\n  }, t.Widget = function () {}, t.Widget._childConstructors = [], t.Widget.prototype = {\n    widgetName: \"widget\",\n    widgetEventPrefix: \"\",\n    defaultElement: \"<div>\",\n    options: {\n      classes: {},\n      disabled: !1,\n      create: null\n    },\n    _createWidget: function _createWidget(i, s) {\n      s = t(s || this.defaultElement || this)[0], this.element = t(s), this.uuid = e++, this.eventNamespace = \".\" + this.widgetName + this.uuid, this.bindings = t(), this.hoverable = t(), this.focusable = t(), this.classesElementLookup = {}, s !== this && (t.data(s, this.widgetFullName, this), this._on(!0, this.element, {\n        remove: function remove(t) {\n          t.target === s && this.destroy();\n        }\n      }), this.document = t(s.style ? s.ownerDocument : s.document || s), this.window = t(this.document[0].defaultView || this.document[0].parentWindow)), this.options = t.widget.extend({}, this.options, this._getCreateOptions(), i), this._create(), this.options.disabled && this._setOptionDisabled(this.options.disabled), this._trigger(\"create\", null, this._getCreateEventData()), this._init();\n    },\n    _getCreateOptions: function _getCreateOptions() {\n      return {};\n    },\n    _getCreateEventData: t.noop,\n    _create: t.noop,\n    _init: t.noop,\n    destroy: function destroy() {\n      var e = this;\n      this._destroy(), t.each(this.classesElementLookup, function (t, i) {\n        e._removeClass(i, t);\n      }), this.element.off(this.eventNamespace).removeData(this.widgetFullName), this.widget().off(this.eventNamespace).removeAttr(\"aria-disabled\"), this.bindings.off(this.eventNamespace);\n    },\n    _destroy: t.noop,\n    widget: function widget() {\n      return this.element;\n    },\n    option: function option(e, i) {\n      var s,\n          n,\n          o,\n          a = e;\n      if (0 === arguments.length) return t.widget.extend({}, this.options);\n      if (\"string\" == typeof e) if (a = {}, s = e.split(\".\"), e = s.shift(), s.length) {\n        for (n = a[e] = t.widget.extend({}, this.options[e]), o = 0; s.length - 1 > o; o++) {\n          n[s[o]] = n[s[o]] || {}, n = n[s[o]];\n        }\n\n        if (e = s.pop(), 1 === arguments.length) return void 0 === n[e] ? null : n[e];\n        n[e] = i;\n      } else {\n        if (1 === arguments.length) return void 0 === this.options[e] ? null : this.options[e];\n        a[e] = i;\n      }\n      return this._setOptions(a), this;\n    },\n    _setOptions: function _setOptions(t) {\n      var e;\n\n      for (e in t) {\n        this._setOption(e, t[e]);\n      }\n\n      return this;\n    },\n    _setOption: function _setOption(t, e) {\n      return \"classes\" === t && this._setOptionClasses(e), this.options[t] = e, \"disabled\" === t && this._setOptionDisabled(e), this;\n    },\n    _setOptionClasses: function _setOptionClasses(e) {\n      var i, s, n;\n\n      for (i in e) {\n        n = this.classesElementLookup[i], e[i] !== this.options.classes[i] && n && n.length && (s = t(n.get()), this._removeClass(n, i), s.addClass(this._classes({\n          element: s,\n          keys: i,\n          classes: e,\n          add: !0\n        })));\n      }\n    },\n    _setOptionDisabled: function _setOptionDisabled(t) {\n      this._toggleClass(this.widget(), this.widgetFullName + \"-disabled\", null, !!t), t && (this._removeClass(this.hoverable, null, \"ui-state-hover\"), this._removeClass(this.focusable, null, \"ui-state-focus\"));\n    },\n    enable: function enable() {\n      return this._setOptions({\n        disabled: !1\n      });\n    },\n    disable: function disable() {\n      return this._setOptions({\n        disabled: !0\n      });\n    },\n    _classes: function _classes(e) {\n      function i(i, o) {\n        var a, r;\n\n        for (r = 0; i.length > r; r++) {\n          a = n.classesElementLookup[i[r]] || t(), a = e.add ? t(t.unique(a.get().concat(e.element.get()))) : t(a.not(e.element).get()), n.classesElementLookup[i[r]] = a, s.push(i[r]), o && e.classes[i[r]] && s.push(e.classes[i[r]]);\n        }\n      }\n\n      var s = [],\n          n = this;\n      return e = t.extend({\n        element: this.element,\n        classes: this.options.classes || {}\n      }, e), this._on(e.element, {\n        remove: \"_untrackClassesElement\"\n      }), e.keys && i(e.keys.match(/\\S+/g) || [], !0), e.extra && i(e.extra.match(/\\S+/g) || []), s.join(\" \");\n    },\n    _untrackClassesElement: function _untrackClassesElement(e) {\n      var i = this;\n      t.each(i.classesElementLookup, function (s, n) {\n        -1 !== t.inArray(e.target, n) && (i.classesElementLookup[s] = t(n.not(e.target).get()));\n      });\n    },\n    _removeClass: function _removeClass(t, e, i) {\n      return this._toggleClass(t, e, i, !1);\n    },\n    _addClass: function _addClass(t, e, i) {\n      return this._toggleClass(t, e, i, !0);\n    },\n    _toggleClass: function _toggleClass(t, e, i, s) {\n      s = \"boolean\" == typeof s ? s : i;\n      var n = \"string\" == typeof t || null === t,\n          o = {\n        extra: n ? e : i,\n        keys: n ? t : e,\n        element: n ? this.element : t,\n        add: s\n      };\n      return o.element.toggleClass(this._classes(o), s), this;\n    },\n    _on: function _on(e, i, s) {\n      var n,\n          o = this;\n      \"boolean\" != typeof e && (s = i, i = e, e = !1), s ? (i = n = t(i), this.bindings = this.bindings.add(i)) : (s = i, i = this.element, n = this.widget()), t.each(s, function (s, a) {\n        function r() {\n          return e || o.options.disabled !== !0 && !t(this).hasClass(\"ui-state-disabled\") ? (\"string\" == typeof a ? o[a] : a).apply(o, arguments) : void 0;\n        }\n\n        \"string\" != typeof a && (r.guid = a.guid = a.guid || r.guid || t.guid++);\n        var h = s.match(/^([\\w:-]*)\\s*(.*)$/),\n            l = h[1] + o.eventNamespace,\n            c = h[2];\n        c ? n.on(l, c, r) : i.on(l, r);\n      });\n    },\n    _off: function _off(e, i) {\n      i = (i || \"\").split(\" \").join(this.eventNamespace + \" \") + this.eventNamespace, e.off(i).off(i), this.bindings = t(this.bindings.not(e).get()), this.focusable = t(this.focusable.not(e).get()), this.hoverable = t(this.hoverable.not(e).get());\n    },\n    _delay: function _delay(t, e) {\n      function i() {\n        return (\"string\" == typeof t ? s[t] : t).apply(s, arguments);\n      }\n\n      var s = this;\n      return setTimeout(i, e || 0);\n    },\n    _hoverable: function _hoverable(e) {\n      this.hoverable = this.hoverable.add(e), this._on(e, {\n        mouseenter: function mouseenter(e) {\n          this._addClass(t(e.currentTarget), null, \"ui-state-hover\");\n        },\n        mouseleave: function mouseleave(e) {\n          this._removeClass(t(e.currentTarget), null, \"ui-state-hover\");\n        }\n      });\n    },\n    _focusable: function _focusable(e) {\n      this.focusable = this.focusable.add(e), this._on(e, {\n        focusin: function focusin(e) {\n          this._addClass(t(e.currentTarget), null, \"ui-state-focus\");\n        },\n        focusout: function focusout(e) {\n          this._removeClass(t(e.currentTarget), null, \"ui-state-focus\");\n        }\n      });\n    },\n    _trigger: function _trigger(e, i, s) {\n      var n,\n          o,\n          a = this.options[e];\n      if (s = s || {}, i = t.Event(i), i.type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), i.target = this.element[0], o = i.originalEvent) for (n in o) {\n        n in i || (i[n] = o[n]);\n      }\n      return this.element.trigger(i, s), !(t.isFunction(a) && a.apply(this.element[0], [i].concat(s)) === !1 || i.isDefaultPrevented());\n    }\n  }, t.each({\n    show: \"fadeIn\",\n    hide: \"fadeOut\"\n  }, function (e, i) {\n    t.Widget.prototype[\"_\" + e] = function (s, n, o) {\n      \"string\" == typeof n && (n = {\n        effect: n\n      });\n      var a,\n          r = n ? n === !0 || \"number\" == typeof n ? i : n.effect || i : e;\n      n = n || {}, \"number\" == typeof n && (n = {\n        duration: n\n      }), a = !t.isEmptyObject(n), n.complete = o, n.delay && s.delay(n.delay), a && t.effects && t.effects.effect[r] ? s[e](n) : r !== e && s[r] ? s[r](n.duration, n.easing, o) : s.queue(function (i) {\n        t(this)[e](), o && o.call(s[0]), i();\n      });\n    };\n  }), t.widget, function () {\n    function e(t, e, i) {\n      return [parseFloat(t[0]) * (u.test(t[0]) ? e / 100 : 1), parseFloat(t[1]) * (u.test(t[1]) ? i / 100 : 1)];\n    }\n\n    function i(e, i) {\n      return parseInt(t.css(e, i), 10) || 0;\n    }\n\n    function s(e) {\n      var i = e[0];\n      return 9 === i.nodeType ? {\n        width: e.width(),\n        height: e.height(),\n        offset: {\n          top: 0,\n          left: 0\n        }\n      } : t.isWindow(i) ? {\n        width: e.width(),\n        height: e.height(),\n        offset: {\n          top: e.scrollTop(),\n          left: e.scrollLeft()\n        }\n      } : i.preventDefault ? {\n        width: 0,\n        height: 0,\n        offset: {\n          top: i.pageY,\n          left: i.pageX\n        }\n      } : {\n        width: e.outerWidth(),\n        height: e.outerHeight(),\n        offset: e.offset()\n      };\n    }\n\n    var n,\n        o = Math.max,\n        a = Math.abs,\n        r = /left|center|right/,\n        h = /top|center|bottom/,\n        l = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n        c = /^\\w+/,\n        u = /%$/,\n        d = t.fn.position;\n    t.position = {\n      scrollbarWidth: function scrollbarWidth() {\n        if (void 0 !== n) return n;\n        var e,\n            i,\n            s = t(\"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\"),\n            o = s.children()[0];\n        return t(\"body\").append(s), e = o.offsetWidth, s.css(\"overflow\", \"scroll\"), i = o.offsetWidth, e === i && (i = s[0].clientWidth), s.remove(), n = e - i;\n      },\n      getScrollInfo: function getScrollInfo(e) {\n        var i = e.isWindow || e.isDocument ? \"\" : e.element.css(\"overflow-x\"),\n            s = e.isWindow || e.isDocument ? \"\" : e.element.css(\"overflow-y\"),\n            n = \"scroll\" === i || \"auto\" === i && e.width < e.element[0].scrollWidth,\n            o = \"scroll\" === s || \"auto\" === s && e.height < e.element[0].scrollHeight;\n        return {\n          width: o ? t.position.scrollbarWidth() : 0,\n          height: n ? t.position.scrollbarWidth() : 0\n        };\n      },\n      getWithinInfo: function getWithinInfo(e) {\n        var i = t(e || window),\n            s = t.isWindow(i[0]),\n            n = !!i[0] && 9 === i[0].nodeType,\n            o = !s && !n;\n        return {\n          element: i,\n          isWindow: s,\n          isDocument: n,\n          offset: o ? t(e).offset() : {\n            left: 0,\n            top: 0\n          },\n          scrollLeft: i.scrollLeft(),\n          scrollTop: i.scrollTop(),\n          width: i.outerWidth(),\n          height: i.outerHeight()\n        };\n      }\n    }, t.fn.position = function (n) {\n      if (!n || !n.of) return d.apply(this, arguments);\n      n = t.extend({}, n);\n\n      var u,\n          p,\n          f,\n          m,\n          g,\n          _,\n          v = t(n.of),\n          b = t.position.getWithinInfo(n.within),\n          y = t.position.getScrollInfo(b),\n          w = (n.collision || \"flip\").split(\" \"),\n          k = {};\n\n      return _ = s(v), v[0].preventDefault && (n.at = \"left top\"), p = _.width, f = _.height, m = _.offset, g = t.extend({}, m), t.each([\"my\", \"at\"], function () {\n        var t,\n            e,\n            i = (n[this] || \"\").split(\" \");\n        1 === i.length && (i = r.test(i[0]) ? i.concat([\"center\"]) : h.test(i[0]) ? [\"center\"].concat(i) : [\"center\", \"center\"]), i[0] = r.test(i[0]) ? i[0] : \"center\", i[1] = h.test(i[1]) ? i[1] : \"center\", t = l.exec(i[0]), e = l.exec(i[1]), k[this] = [t ? t[0] : 0, e ? e[0] : 0], n[this] = [c.exec(i[0])[0], c.exec(i[1])[0]];\n      }), 1 === w.length && (w[1] = w[0]), \"right\" === n.at[0] ? g.left += p : \"center\" === n.at[0] && (g.left += p / 2), \"bottom\" === n.at[1] ? g.top += f : \"center\" === n.at[1] && (g.top += f / 2), u = e(k.at, p, f), g.left += u[0], g.top += u[1], this.each(function () {\n        var s,\n            r,\n            h = t(this),\n            l = h.outerWidth(),\n            c = h.outerHeight(),\n            d = i(this, \"marginLeft\"),\n            _ = i(this, \"marginTop\"),\n            x = l + d + i(this, \"marginRight\") + y.width,\n            D = c + _ + i(this, \"marginBottom\") + y.height,\n            C = t.extend({}, g),\n            T = e(k.my, h.outerWidth(), h.outerHeight());\n\n        \"right\" === n.my[0] ? C.left -= l : \"center\" === n.my[0] && (C.left -= l / 2), \"bottom\" === n.my[1] ? C.top -= c : \"center\" === n.my[1] && (C.top -= c / 2), C.left += T[0], C.top += T[1], s = {\n          marginLeft: d,\n          marginTop: _\n        }, t.each([\"left\", \"top\"], function (e, i) {\n          t.ui.position[w[e]] && t.ui.position[w[e]][i](C, {\n            targetWidth: p,\n            targetHeight: f,\n            elemWidth: l,\n            elemHeight: c,\n            collisionPosition: s,\n            collisionWidth: x,\n            collisionHeight: D,\n            offset: [u[0] + T[0], u[1] + T[1]],\n            my: n.my,\n            at: n.at,\n            within: b,\n            elem: h\n          });\n        }), n.using && (r = function r(t) {\n          var e = m.left - C.left,\n              i = e + p - l,\n              s = m.top - C.top,\n              r = s + f - c,\n              u = {\n            target: {\n              element: v,\n              left: m.left,\n              top: m.top,\n              width: p,\n              height: f\n            },\n            element: {\n              element: h,\n              left: C.left,\n              top: C.top,\n              width: l,\n              height: c\n            },\n            horizontal: 0 > i ? \"left\" : e > 0 ? \"right\" : \"center\",\n            vertical: 0 > r ? \"top\" : s > 0 ? \"bottom\" : \"middle\"\n          };\n          l > p && p > a(e + i) && (u.horizontal = \"center\"), c > f && f > a(s + r) && (u.vertical = \"middle\"), u.important = o(a(e), a(i)) > o(a(s), a(r)) ? \"horizontal\" : \"vertical\", n.using.call(this, t, u);\n        }), h.offset(t.extend(C, {\n          using: r\n        }));\n      });\n    }, t.ui.position = {\n      fit: {\n        left: function left(t, e) {\n          var i,\n              s = e.within,\n              n = s.isWindow ? s.scrollLeft : s.offset.left,\n              a = s.width,\n              r = t.left - e.collisionPosition.marginLeft,\n              h = n - r,\n              l = r + e.collisionWidth - a - n;\n          e.collisionWidth > a ? h > 0 && 0 >= l ? (i = t.left + h + e.collisionWidth - a - n, t.left += h - i) : t.left = l > 0 && 0 >= h ? n : h > l ? n + a - e.collisionWidth : n : h > 0 ? t.left += h : l > 0 ? t.left -= l : t.left = o(t.left - r, t.left);\n        },\n        top: function top(t, e) {\n          var i,\n              s = e.within,\n              n = s.isWindow ? s.scrollTop : s.offset.top,\n              a = e.within.height,\n              r = t.top - e.collisionPosition.marginTop,\n              h = n - r,\n              l = r + e.collisionHeight - a - n;\n          e.collisionHeight > a ? h > 0 && 0 >= l ? (i = t.top + h + e.collisionHeight - a - n, t.top += h - i) : t.top = l > 0 && 0 >= h ? n : h > l ? n + a - e.collisionHeight : n : h > 0 ? t.top += h : l > 0 ? t.top -= l : t.top = o(t.top - r, t.top);\n        }\n      },\n      flip: {\n        left: function left(t, e) {\n          var i,\n              s,\n              n = e.within,\n              o = n.offset.left + n.scrollLeft,\n              r = n.width,\n              h = n.isWindow ? n.scrollLeft : n.offset.left,\n              l = t.left - e.collisionPosition.marginLeft,\n              c = l - h,\n              u = l + e.collisionWidth - r - h,\n              d = \"left\" === e.my[0] ? -e.elemWidth : \"right\" === e.my[0] ? e.elemWidth : 0,\n              p = \"left\" === e.at[0] ? e.targetWidth : \"right\" === e.at[0] ? -e.targetWidth : 0,\n              f = -2 * e.offset[0];\n          0 > c ? (i = t.left + d + p + f + e.collisionWidth - r - o, (0 > i || a(c) > i) && (t.left += d + p + f)) : u > 0 && (s = t.left - e.collisionPosition.marginLeft + d + p + f - h, (s > 0 || u > a(s)) && (t.left += d + p + f));\n        },\n        top: function top(t, e) {\n          var i,\n              s,\n              n = e.within,\n              o = n.offset.top + n.scrollTop,\n              r = n.height,\n              h = n.isWindow ? n.scrollTop : n.offset.top,\n              l = t.top - e.collisionPosition.marginTop,\n              c = l - h,\n              u = l + e.collisionHeight - r - h,\n              d = \"top\" === e.my[1],\n              p = d ? -e.elemHeight : \"bottom\" === e.my[1] ? e.elemHeight : 0,\n              f = \"top\" === e.at[1] ? e.targetHeight : \"bottom\" === e.at[1] ? -e.targetHeight : 0,\n              m = -2 * e.offset[1];\n          0 > c ? (s = t.top + p + f + m + e.collisionHeight - r - o, (0 > s || a(c) > s) && (t.top += p + f + m)) : u > 0 && (i = t.top - e.collisionPosition.marginTop + p + f + m - h, (i > 0 || u > a(i)) && (t.top += p + f + m));\n        }\n      },\n      flipfit: {\n        left: function left() {\n          t.ui.position.flip.left.apply(this, arguments), t.ui.position.fit.left.apply(this, arguments);\n        },\n        top: function top() {\n          t.ui.position.flip.top.apply(this, arguments), t.ui.position.fit.top.apply(this, arguments);\n        }\n      }\n    };\n  }(), t.ui.position, t.extend(t.expr[\":\"], {\n    data: t.expr.createPseudo ? t.expr.createPseudo(function (e) {\n      return function (i) {\n        return !!t.data(i, e);\n      };\n    }) : function (e, i, s) {\n      return !!t.data(e, s[3]);\n    }\n  }), t.fn.extend({\n    disableSelection: function () {\n      var t = \"onselectstart\" in document.createElement(\"div\") ? \"selectstart\" : \"mousedown\";\n      return function () {\n        return this.on(t + \".ui-disableSelection\", function (t) {\n          t.preventDefault();\n        });\n      };\n    }(),\n    enableSelection: function enableSelection() {\n      return this.off(\".ui-disableSelection\");\n    }\n  }), t.ui.keyCode = {\n    BACKSPACE: 8,\n    COMMA: 188,\n    DELETE: 46,\n    DOWN: 40,\n    END: 35,\n    ENTER: 13,\n    ESCAPE: 27,\n    HOME: 36,\n    LEFT: 37,\n    PAGE_DOWN: 34,\n    PAGE_UP: 33,\n    PERIOD: 190,\n    RIGHT: 39,\n    SPACE: 32,\n    TAB: 9,\n    UP: 38\n  }, t.fn.scrollParent = function (e) {\n    var i = this.css(\"position\"),\n        s = \"absolute\" === i,\n        n = e ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n        o = this.parents().filter(function () {\n      var e = t(this);\n      return s && \"static\" === e.css(\"position\") ? !1 : n.test(e.css(\"overflow\") + e.css(\"overflow-y\") + e.css(\"overflow-x\"));\n    }).eq(0);\n    return \"fixed\" !== i && o.length ? o : t(this[0].ownerDocument || document);\n  }, t.fn.extend({\n    uniqueId: function () {\n      var t = 0;\n      return function () {\n        return this.each(function () {\n          this.id || (this.id = \"ui-id-\" + ++t);\n        });\n      };\n    }(),\n    removeUniqueId: function removeUniqueId() {\n      return this.each(function () {\n        /^ui-id-\\d+$/.test(this.id) && t(this).removeAttr(\"id\");\n      });\n    }\n  }), t.ui.ie = !!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase());\n  var s = !1;\n  t(document).on(\"mouseup\", function () {\n    s = !1;\n  }), t.widget(\"ui.mouse\", {\n    version: \"1.12.1\",\n    options: {\n      cancel: \"input, textarea, button, select, option\",\n      distance: 1,\n      delay: 0\n    },\n    _mouseInit: function _mouseInit() {\n      var e = this;\n      this.element.on(\"mousedown.\" + this.widgetName, function (t) {\n        return e._mouseDown(t);\n      }).on(\"click.\" + this.widgetName, function (i) {\n        return !0 === t.data(i.target, e.widgetName + \".preventClickEvent\") ? (t.removeData(i.target, e.widgetName + \".preventClickEvent\"), i.stopImmediatePropagation(), !1) : void 0;\n      }), this.started = !1;\n    },\n    _mouseDestroy: function _mouseDestroy() {\n      this.element.off(\".\" + this.widgetName), this._mouseMoveDelegate && this.document.off(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate).off(\"mouseup.\" + this.widgetName, this._mouseUpDelegate);\n    },\n    _mouseDown: function _mouseDown(e) {\n      if (!s) {\n        this._mouseMoved = !1, this._mouseStarted && this._mouseUp(e), this._mouseDownEvent = e;\n        var i = this,\n            n = 1 === e.which,\n            o = \"string\" == typeof this.options.cancel && e.target.nodeName ? t(e.target).closest(this.options.cancel).length : !1;\n        return n && !o && this._mouseCapture(e) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function () {\n          i.mouseDelayMet = !0;\n        }, this.options.delay)), this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = this._mouseStart(e) !== !1, !this._mouseStarted) ? (e.preventDefault(), !0) : (!0 === t.data(e.target, this.widgetName + \".preventClickEvent\") && t.removeData(e.target, this.widgetName + \".preventClickEvent\"), this._mouseMoveDelegate = function (t) {\n          return i._mouseMove(t);\n        }, this._mouseUpDelegate = function (t) {\n          return i._mouseUp(t);\n        }, this.document.on(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate).on(\"mouseup.\" + this.widgetName, this._mouseUpDelegate), e.preventDefault(), s = !0, !0)) : !0;\n      }\n    },\n    _mouseMove: function _mouseMove(e) {\n      if (this._mouseMoved) {\n        if (t.ui.ie && (!document.documentMode || 9 > document.documentMode) && !e.button) return this._mouseUp(e);\n        if (!e.which) if (e.originalEvent.altKey || e.originalEvent.ctrlKey || e.originalEvent.metaKey || e.originalEvent.shiftKey) this.ignoreMissingWhich = !0;else if (!this.ignoreMissingWhich) return this._mouseUp(e);\n      }\n\n      return (e.which || e.button) && (this._mouseMoved = !0), this._mouseStarted ? (this._mouseDrag(e), e.preventDefault()) : (this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, e) !== !1, this._mouseStarted ? this._mouseDrag(e) : this._mouseUp(e)), !this._mouseStarted);\n    },\n    _mouseUp: function _mouseUp(e) {\n      this.document.off(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate).off(\"mouseup.\" + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, e.target === this._mouseDownEvent.target && t.data(e.target, this.widgetName + \".preventClickEvent\", !0), this._mouseStop(e)), this._mouseDelayTimer && (clearTimeout(this._mouseDelayTimer), delete this._mouseDelayTimer), this.ignoreMissingWhich = !1, s = !1, e.preventDefault();\n    },\n    _mouseDistanceMet: function _mouseDistanceMet(t) {\n      return Math.max(Math.abs(this._mouseDownEvent.pageX - t.pageX), Math.abs(this._mouseDownEvent.pageY - t.pageY)) >= this.options.distance;\n    },\n    _mouseDelayMet: function _mouseDelayMet() {\n      return this.mouseDelayMet;\n    },\n    _mouseStart: function _mouseStart() {},\n    _mouseDrag: function _mouseDrag() {},\n    _mouseStop: function _mouseStop() {},\n    _mouseCapture: function _mouseCapture() {\n      return !0;\n    }\n  }), t.ui.plugin = {\n    add: function add(e, i, s) {\n      var n,\n          o = t.ui[e].prototype;\n\n      for (n in s) {\n        o.plugins[n] = o.plugins[n] || [], o.plugins[n].push([i, s[n]]);\n      }\n    },\n    call: function call(t, e, i, s) {\n      var n,\n          o = t.plugins[e];\n      if (o && (s || t.element[0].parentNode && 11 !== t.element[0].parentNode.nodeType)) for (n = 0; o.length > n; n++) {\n        t.options[o[n][0]] && o[n][1].apply(t.element, i);\n      }\n    }\n  }, t.ui.safeActiveElement = function (t) {\n    var e;\n\n    try {\n      e = t.activeElement;\n    } catch (i) {\n      e = t.body;\n    }\n\n    return e || (e = t.body), e.nodeName || (e = t.body), e;\n  }, t.ui.safeBlur = function (e) {\n    e && \"body\" !== e.nodeName.toLowerCase() && t(e).trigger(\"blur\");\n  }, t.widget(\"ui.draggable\", t.ui.mouse, {\n    version: \"1.12.1\",\n    widgetEventPrefix: \"drag\",\n    options: {\n      addClasses: !0,\n      appendTo: \"parent\",\n      axis: !1,\n      connectToSortable: !1,\n      containment: !1,\n      cursor: \"auto\",\n      cursorAt: !1,\n      grid: !1,\n      handle: !1,\n      helper: \"original\",\n      iframeFix: !1,\n      opacity: !1,\n      refreshPositions: !1,\n      revert: !1,\n      revertDuration: 500,\n      scope: \"default\",\n      scroll: !0,\n      scrollSensitivity: 20,\n      scrollSpeed: 20,\n      snap: !1,\n      snapMode: \"both\",\n      snapTolerance: 20,\n      stack: !1,\n      zIndex: !1,\n      drag: null,\n      start: null,\n      stop: null\n    },\n    _create: function _create() {\n      \"original\" === this.options.helper && this._setPositionRelative(), this.options.addClasses && this._addClass(\"ui-draggable\"), this._setHandleClassName(), this._mouseInit();\n    },\n    _setOption: function _setOption(t, e) {\n      this._super(t, e), \"handle\" === t && (this._removeHandleClassName(), this._setHandleClassName());\n    },\n    _destroy: function _destroy() {\n      return (this.helper || this.element).is(\".ui-draggable-dragging\") ? (this.destroyOnClear = !0, void 0) : (this._removeHandleClassName(), this._mouseDestroy(), void 0);\n    },\n    _mouseCapture: function _mouseCapture(e) {\n      var i = this.options;\n      return this.helper || i.disabled || t(e.target).closest(\".ui-resizable-handle\").length > 0 ? !1 : (this.handle = this._getHandle(e), this.handle ? (this._blurActiveElement(e), this._blockFrames(i.iframeFix === !0 ? \"iframe\" : i.iframeFix), !0) : !1);\n    },\n    _blockFrames: function _blockFrames(e) {\n      this.iframeBlocks = this.document.find(e).map(function () {\n        var e = t(this);\n        return t(\"<div>\").css(\"position\", \"absolute\").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0];\n      });\n    },\n    _unblockFrames: function _unblockFrames() {\n      this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks);\n    },\n    _blurActiveElement: function _blurActiveElement(e) {\n      var i = t.ui.safeActiveElement(this.document[0]),\n          s = t(e.target);\n      s.closest(i).length || t.ui.safeBlur(i);\n    },\n    _mouseStart: function _mouseStart(e) {\n      var i = this.options;\n      return this.helper = this._createHelper(e), this._addClass(this.helper, \"ui-draggable-dragging\"), this._cacheHelperProportions(), t.ui.ddmanager && (t.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css(\"position\"), this.scrollParent = this.helper.scrollParent(!0), this.offsetParent = this.helper.offsetParent(), this.hasFixedAncestor = this.helper.parents().filter(function () {\n        return \"fixed\" === t(this).css(\"position\");\n      }).length > 0, this.positionAbs = this.element.offset(), this._refreshOffsets(e), this.originalPosition = this.position = this._generatePosition(e, !1), this.originalPageX = e.pageX, this.originalPageY = e.pageY, i.cursorAt && this._adjustOffsetFromHelper(i.cursorAt), this._setContainment(), this._trigger(\"start\", e) === !1 ? (this._clear(), !1) : (this._cacheHelperProportions(), t.ui.ddmanager && !i.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e), this._mouseDrag(e, !0), t.ui.ddmanager && t.ui.ddmanager.dragStart(this, e), !0);\n    },\n    _refreshOffsets: function _refreshOffsets(t) {\n      this.offset = {\n        top: this.positionAbs.top - this.margins.top,\n        left: this.positionAbs.left - this.margins.left,\n        scroll: !1,\n        parent: this._getParentOffset(),\n        relative: this._getRelativeOffset()\n      }, this.offset.click = {\n        left: t.pageX - this.offset.left,\n        top: t.pageY - this.offset.top\n      };\n    },\n    _mouseDrag: function _mouseDrag(e, i) {\n      if (this.hasFixedAncestor && (this.offset.parent = this._getParentOffset()), this.position = this._generatePosition(e, !0), this.positionAbs = this._convertPositionTo(\"absolute\"), !i) {\n        var s = this._uiHash();\n\n        if (this._trigger(\"drag\", e, s) === !1) return this._mouseUp(new t.Event(\"mouseup\", e)), !1;\n        this.position = s.position;\n      }\n\n      return this.helper[0].style.left = this.position.left + \"px\", this.helper[0].style.top = this.position.top + \"px\", t.ui.ddmanager && t.ui.ddmanager.drag(this, e), !1;\n    },\n    _mouseStop: function _mouseStop(e) {\n      var i = this,\n          s = !1;\n      return t.ui.ddmanager && !this.options.dropBehaviour && (s = t.ui.ddmanager.drop(this, e)), this.dropped && (s = this.dropped, this.dropped = !1), \"invalid\" === this.options.revert && !s || \"valid\" === this.options.revert && s || this.options.revert === !0 || t.isFunction(this.options.revert) && this.options.revert.call(this.element, s) ? t(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function () {\n        i._trigger(\"stop\", e) !== !1 && i._clear();\n      }) : this._trigger(\"stop\", e) !== !1 && this._clear(), !1;\n    },\n    _mouseUp: function _mouseUp(e) {\n      return this._unblockFrames(), t.ui.ddmanager && t.ui.ddmanager.dragStop(this, e), this.handleElement.is(e.target) && this.element.trigger(\"focus\"), t.ui.mouse.prototype._mouseUp.call(this, e);\n    },\n    cancel: function cancel() {\n      return this.helper.is(\".ui-draggable-dragging\") ? this._mouseUp(new t.Event(\"mouseup\", {\n        target: this.element[0]\n      })) : this._clear(), this;\n    },\n    _getHandle: function _getHandle(e) {\n      return this.options.handle ? !!t(e.target).closest(this.element.find(this.options.handle)).length : !0;\n    },\n    _setHandleClassName: function _setHandleClassName() {\n      this.handleElement = this.options.handle ? this.element.find(this.options.handle) : this.element, this._addClass(this.handleElement, \"ui-draggable-handle\");\n    },\n    _removeHandleClassName: function _removeHandleClassName() {\n      this._removeClass(this.handleElement, \"ui-draggable-handle\");\n    },\n    _createHelper: function _createHelper(e) {\n      var i = this.options,\n          s = t.isFunction(i.helper),\n          n = s ? t(i.helper.apply(this.element[0], [e])) : \"clone\" === i.helper ? this.element.clone().removeAttr(\"id\") : this.element;\n      return n.parents(\"body\").length || n.appendTo(\"parent\" === i.appendTo ? this.element[0].parentNode : i.appendTo), s && n[0] === this.element[0] && this._setPositionRelative(), n[0] === this.element[0] || /(fixed|absolute)/.test(n.css(\"position\")) || n.css(\"position\", \"absolute\"), n;\n    },\n    _setPositionRelative: function _setPositionRelative() {\n      /^(?:r|a|f)/.test(this.element.css(\"position\")) || (this.element[0].style.position = \"relative\");\n    },\n    _adjustOffsetFromHelper: function _adjustOffsetFromHelper(e) {\n      \"string\" == typeof e && (e = e.split(\" \")), t.isArray(e) && (e = {\n        left: +e[0],\n        top: +e[1] || 0\n      }), \"left\" in e && (this.offset.click.left = e.left + this.margins.left), \"right\" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), \"top\" in e && (this.offset.click.top = e.top + this.margins.top), \"bottom\" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top);\n    },\n    _isRootNode: function _isRootNode(t) {\n      return /(html|body)/i.test(t.tagName) || t === this.document[0];\n    },\n    _getParentOffset: function _getParentOffset() {\n      var e = this.offsetParent.offset(),\n          i = this.document[0];\n      return \"absolute\" === this.cssPosition && this.scrollParent[0] !== i && t.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), this._isRootNode(this.offsetParent[0]) && (e = {\n        top: 0,\n        left: 0\n      }), {\n        top: e.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"), 10) || 0),\n        left: e.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"), 10) || 0)\n      };\n    },\n    _getRelativeOffset: function _getRelativeOffset() {\n      if (\"relative\" !== this.cssPosition) return {\n        top: 0,\n        left: 0\n      };\n\n      var t = this.element.position(),\n          e = this._isRootNode(this.scrollParent[0]);\n\n      return {\n        top: t.top - (parseInt(this.helper.css(\"top\"), 10) || 0) + (e ? 0 : this.scrollParent.scrollTop()),\n        left: t.left - (parseInt(this.helper.css(\"left\"), 10) || 0) + (e ? 0 : this.scrollParent.scrollLeft())\n      };\n    },\n    _cacheMargins: function _cacheMargins() {\n      this.margins = {\n        left: parseInt(this.element.css(\"marginLeft\"), 10) || 0,\n        top: parseInt(this.element.css(\"marginTop\"), 10) || 0,\n        right: parseInt(this.element.css(\"marginRight\"), 10) || 0,\n        bottom: parseInt(this.element.css(\"marginBottom\"), 10) || 0\n      };\n    },\n    _cacheHelperProportions: function _cacheHelperProportions() {\n      this.helperProportions = {\n        width: this.helper.outerWidth(),\n        height: this.helper.outerHeight()\n      };\n    },\n    _setContainment: function _setContainment() {\n      var e,\n          i,\n          s,\n          n = this.options,\n          o = this.document[0];\n      return this.relativeContainer = null, n.containment ? \"window\" === n.containment ? (this.containment = [t(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, t(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, t(window).scrollLeft() + t(window).width() - this.helperProportions.width - this.margins.left, t(window).scrollTop() + (t(window).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top], void 0) : \"document\" === n.containment ? (this.containment = [0, 0, t(o).width() - this.helperProportions.width - this.margins.left, (t(o).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top], void 0) : n.containment.constructor === Array ? (this.containment = n.containment, void 0) : (\"parent\" === n.containment && (n.containment = this.helper[0].parentNode), i = t(n.containment), s = i[0], s && (e = /(scroll|auto)/.test(i.css(\"overflow\")), this.containment = [(parseInt(i.css(\"borderLeftWidth\"), 10) || 0) + (parseInt(i.css(\"paddingLeft\"), 10) || 0), (parseInt(i.css(\"borderTopWidth\"), 10) || 0) + (parseInt(i.css(\"paddingTop\"), 10) || 0), (e ? Math.max(s.scrollWidth, s.offsetWidth) : s.offsetWidth) - (parseInt(i.css(\"borderRightWidth\"), 10) || 0) - (parseInt(i.css(\"paddingRight\"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (e ? Math.max(s.scrollHeight, s.offsetHeight) : s.offsetHeight) - (parseInt(i.css(\"borderBottomWidth\"), 10) || 0) - (parseInt(i.css(\"paddingBottom\"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relativeContainer = i), void 0) : (this.containment = null, void 0);\n    },\n    _convertPositionTo: function _convertPositionTo(t, e) {\n      e || (e = this.position);\n\n      var i = \"absolute\" === t ? 1 : -1,\n          s = this._isRootNode(this.scrollParent[0]);\n\n      return {\n        top: e.top + this.offset.relative.top * i + this.offset.parent.top * i - (\"fixed\" === this.cssPosition ? -this.offset.scroll.top : s ? 0 : this.offset.scroll.top) * i,\n        left: e.left + this.offset.relative.left * i + this.offset.parent.left * i - (\"fixed\" === this.cssPosition ? -this.offset.scroll.left : s ? 0 : this.offset.scroll.left) * i\n      };\n    },\n    _generatePosition: function _generatePosition(t, e) {\n      var i,\n          s,\n          n,\n          o,\n          a = this.options,\n          r = this._isRootNode(this.scrollParent[0]),\n          h = t.pageX,\n          l = t.pageY;\n\n      return r && this.offset.scroll || (this.offset.scroll = {\n        top: this.scrollParent.scrollTop(),\n        left: this.scrollParent.scrollLeft()\n      }), e && (this.containment && (this.relativeContainer ? (s = this.relativeContainer.offset(), i = [this.containment[0] + s.left, this.containment[1] + s.top, this.containment[2] + s.left, this.containment[3] + s.top]) : i = this.containment, t.pageX - this.offset.click.left < i[0] && (h = i[0] + this.offset.click.left), t.pageY - this.offset.click.top < i[1] && (l = i[1] + this.offset.click.top), t.pageX - this.offset.click.left > i[2] && (h = i[2] + this.offset.click.left), t.pageY - this.offset.click.top > i[3] && (l = i[3] + this.offset.click.top)), a.grid && (n = a.grid[1] ? this.originalPageY + Math.round((l - this.originalPageY) / a.grid[1]) * a.grid[1] : this.originalPageY, l = i ? n - this.offset.click.top >= i[1] || n - this.offset.click.top > i[3] ? n : n - this.offset.click.top >= i[1] ? n - a.grid[1] : n + a.grid[1] : n, o = a.grid[0] ? this.originalPageX + Math.round((h - this.originalPageX) / a.grid[0]) * a.grid[0] : this.originalPageX, h = i ? o - this.offset.click.left >= i[0] || o - this.offset.click.left > i[2] ? o : o - this.offset.click.left >= i[0] ? o - a.grid[0] : o + a.grid[0] : o), \"y\" === a.axis && (h = this.originalPageX), \"x\" === a.axis && (l = this.originalPageY)), {\n        top: l - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + (\"fixed\" === this.cssPosition ? -this.offset.scroll.top : r ? 0 : this.offset.scroll.top),\n        left: h - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (\"fixed\" === this.cssPosition ? -this.offset.scroll.left : r ? 0 : this.offset.scroll.left)\n      };\n    },\n    _clear: function _clear() {\n      this._removeClass(this.helper, \"ui-draggable-dragging\"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1, this.destroyOnClear && this.destroy();\n    },\n    _trigger: function _trigger(e, i, s) {\n      return s = s || this._uiHash(), t.ui.plugin.call(this, e, [i, s, this], !0), /^(drag|start|stop)/.test(e) && (this.positionAbs = this._convertPositionTo(\"absolute\"), s.offset = this.positionAbs), t.Widget.prototype._trigger.call(this, e, i, s);\n    },\n    plugins: {},\n    _uiHash: function _uiHash() {\n      return {\n        helper: this.helper,\n        position: this.position,\n        originalPosition: this.originalPosition,\n        offset: this.positionAbs\n      };\n    }\n  }), t.ui.plugin.add(\"draggable\", \"connectToSortable\", {\n    start: function start(e, i, s) {\n      var n = t.extend({}, i, {\n        item: s.element\n      });\n      s.sortables = [], t(s.options.connectToSortable).each(function () {\n        var i = t(this).sortable(\"instance\");\n        i && !i.options.disabled && (s.sortables.push(i), i.refreshPositions(), i._trigger(\"activate\", e, n));\n      });\n    },\n    stop: function stop(e, i, s) {\n      var n = t.extend({}, i, {\n        item: s.element\n      });\n      s.cancelHelperRemoval = !1, t.each(s.sortables, function () {\n        var t = this;\n        t.isOver ? (t.isOver = 0, s.cancelHelperRemoval = !0, t.cancelHelperRemoval = !1, t._storedCSS = {\n          position: t.placeholder.css(\"position\"),\n          top: t.placeholder.css(\"top\"),\n          left: t.placeholder.css(\"left\")\n        }, t._mouseStop(e), t.options.helper = t.options._helper) : (t.cancelHelperRemoval = !0, t._trigger(\"deactivate\", e, n));\n      });\n    },\n    drag: function drag(e, i, s) {\n      t.each(s.sortables, function () {\n        var n = !1,\n            o = this;\n        o.positionAbs = s.positionAbs, o.helperProportions = s.helperProportions, o.offset.click = s.offset.click, o._intersectsWith(o.containerCache) && (n = !0, t.each(s.sortables, function () {\n          return this.positionAbs = s.positionAbs, this.helperProportions = s.helperProportions, this.offset.click = s.offset.click, this !== o && this._intersectsWith(this.containerCache) && t.contains(o.element[0], this.element[0]) && (n = !1), n;\n        })), n ? (o.isOver || (o.isOver = 1, s._parent = i.helper.parent(), o.currentItem = i.helper.appendTo(o.element).data(\"ui-sortable-item\", !0), o.options._helper = o.options.helper, o.options.helper = function () {\n          return i.helper[0];\n        }, e.target = o.currentItem[0], o._mouseCapture(e, !0), o._mouseStart(e, !0, !0), o.offset.click.top = s.offset.click.top, o.offset.click.left = s.offset.click.left, o.offset.parent.left -= s.offset.parent.left - o.offset.parent.left, o.offset.parent.top -= s.offset.parent.top - o.offset.parent.top, s._trigger(\"toSortable\", e), s.dropped = o.element, t.each(s.sortables, function () {\n          this.refreshPositions();\n        }), s.currentItem = s.element, o.fromOutside = s), o.currentItem && (o._mouseDrag(e), i.position = o.position)) : o.isOver && (o.isOver = 0, o.cancelHelperRemoval = !0, o.options._revert = o.options.revert, o.options.revert = !1, o._trigger(\"out\", e, o._uiHash(o)), o._mouseStop(e, !0), o.options.revert = o.options._revert, o.options.helper = o.options._helper, o.placeholder && o.placeholder.remove(), i.helper.appendTo(s._parent), s._refreshOffsets(e), i.position = s._generatePosition(e, !0), s._trigger(\"fromSortable\", e), s.dropped = !1, t.each(s.sortables, function () {\n          this.refreshPositions();\n        }));\n      });\n    }\n  }), t.ui.plugin.add(\"draggable\", \"cursor\", {\n    start: function start(e, i, s) {\n      var n = t(\"body\"),\n          o = s.options;\n      n.css(\"cursor\") && (o._cursor = n.css(\"cursor\")), n.css(\"cursor\", o.cursor);\n    },\n    stop: function stop(e, i, s) {\n      var n = s.options;\n      n._cursor && t(\"body\").css(\"cursor\", n._cursor);\n    }\n  }), t.ui.plugin.add(\"draggable\", \"opacity\", {\n    start: function start(e, i, s) {\n      var n = t(i.helper),\n          o = s.options;\n      n.css(\"opacity\") && (o._opacity = n.css(\"opacity\")), n.css(\"opacity\", o.opacity);\n    },\n    stop: function stop(e, i, s) {\n      var n = s.options;\n      n._opacity && t(i.helper).css(\"opacity\", n._opacity);\n    }\n  }), t.ui.plugin.add(\"draggable\", \"scroll\", {\n    start: function start(t, e, i) {\n      i.scrollParentNotHidden || (i.scrollParentNotHidden = i.helper.scrollParent(!1)), i.scrollParentNotHidden[0] !== i.document[0] && \"HTML\" !== i.scrollParentNotHidden[0].tagName && (i.overflowOffset = i.scrollParentNotHidden.offset());\n    },\n    drag: function drag(e, i, s) {\n      var n = s.options,\n          o = !1,\n          a = s.scrollParentNotHidden[0],\n          r = s.document[0];\n      a !== r && \"HTML\" !== a.tagName ? (n.axis && \"x\" === n.axis || (s.overflowOffset.top + a.offsetHeight - e.pageY < n.scrollSensitivity ? a.scrollTop = o = a.scrollTop + n.scrollSpeed : e.pageY - s.overflowOffset.top < n.scrollSensitivity && (a.scrollTop = o = a.scrollTop - n.scrollSpeed)), n.axis && \"y\" === n.axis || (s.overflowOffset.left + a.offsetWidth - e.pageX < n.scrollSensitivity ? a.scrollLeft = o = a.scrollLeft + n.scrollSpeed : e.pageX - s.overflowOffset.left < n.scrollSensitivity && (a.scrollLeft = o = a.scrollLeft - n.scrollSpeed))) : (n.axis && \"x\" === n.axis || (e.pageY - t(r).scrollTop() < n.scrollSensitivity ? o = t(r).scrollTop(t(r).scrollTop() - n.scrollSpeed) : t(window).height() - (e.pageY - t(r).scrollTop()) < n.scrollSensitivity && (o = t(r).scrollTop(t(r).scrollTop() + n.scrollSpeed))), n.axis && \"y\" === n.axis || (e.pageX - t(r).scrollLeft() < n.scrollSensitivity ? o = t(r).scrollLeft(t(r).scrollLeft() - n.scrollSpeed) : t(window).width() - (e.pageX - t(r).scrollLeft()) < n.scrollSensitivity && (o = t(r).scrollLeft(t(r).scrollLeft() + n.scrollSpeed)))), o !== !1 && t.ui.ddmanager && !n.dropBehaviour && t.ui.ddmanager.prepareOffsets(s, e);\n    }\n  }), t.ui.plugin.add(\"draggable\", \"snap\", {\n    start: function start(e, i, s) {\n      var n = s.options;\n      s.snapElements = [], t(n.snap.constructor !== String ? n.snap.items || \":data(ui-draggable)\" : n.snap).each(function () {\n        var e = t(this),\n            i = e.offset();\n        this !== s.element[0] && s.snapElements.push({\n          item: this,\n          width: e.outerWidth(),\n          height: e.outerHeight(),\n          top: i.top,\n          left: i.left\n        });\n      });\n    },\n    drag: function drag(e, i, s) {\n      var n,\n          o,\n          a,\n          r,\n          h,\n          l,\n          c,\n          u,\n          d,\n          p,\n          f = s.options,\n          m = f.snapTolerance,\n          g = i.offset.left,\n          _ = g + s.helperProportions.width,\n          v = i.offset.top,\n          b = v + s.helperProportions.height;\n\n      for (d = s.snapElements.length - 1; d >= 0; d--) {\n        h = s.snapElements[d].left - s.margins.left, l = h + s.snapElements[d].width, c = s.snapElements[d].top - s.margins.top, u = c + s.snapElements[d].height, h - m > _ || g > l + m || c - m > b || v > u + m || !t.contains(s.snapElements[d].item.ownerDocument, s.snapElements[d].item) ? (s.snapElements[d].snapping && s.options.snap.release && s.options.snap.release.call(s.element, e, t.extend(s._uiHash(), {\n          snapItem: s.snapElements[d].item\n        })), s.snapElements[d].snapping = !1) : (\"inner\" !== f.snapMode && (n = m >= Math.abs(c - b), o = m >= Math.abs(u - v), a = m >= Math.abs(h - _), r = m >= Math.abs(l - g), n && (i.position.top = s._convertPositionTo(\"relative\", {\n          top: c - s.helperProportions.height,\n          left: 0\n        }).top), o && (i.position.top = s._convertPositionTo(\"relative\", {\n          top: u,\n          left: 0\n        }).top), a && (i.position.left = s._convertPositionTo(\"relative\", {\n          top: 0,\n          left: h - s.helperProportions.width\n        }).left), r && (i.position.left = s._convertPositionTo(\"relative\", {\n          top: 0,\n          left: l\n        }).left)), p = n || o || a || r, \"outer\" !== f.snapMode && (n = m >= Math.abs(c - v), o = m >= Math.abs(u - b), a = m >= Math.abs(h - g), r = m >= Math.abs(l - _), n && (i.position.top = s._convertPositionTo(\"relative\", {\n          top: c,\n          left: 0\n        }).top), o && (i.position.top = s._convertPositionTo(\"relative\", {\n          top: u - s.helperProportions.height,\n          left: 0\n        }).top), a && (i.position.left = s._convertPositionTo(\"relative\", {\n          top: 0,\n          left: h\n        }).left), r && (i.position.left = s._convertPositionTo(\"relative\", {\n          top: 0,\n          left: l - s.helperProportions.width\n        }).left)), !s.snapElements[d].snapping && (n || o || a || r || p) && s.options.snap.snap && s.options.snap.snap.call(s.element, e, t.extend(s._uiHash(), {\n          snapItem: s.snapElements[d].item\n        })), s.snapElements[d].snapping = n || o || a || r || p);\n      }\n    }\n  }), t.ui.plugin.add(\"draggable\", \"stack\", {\n    start: function start(e, i, s) {\n      var n,\n          o = s.options,\n          a = t.makeArray(t(o.stack)).sort(function (e, i) {\n        return (parseInt(t(e).css(\"zIndex\"), 10) || 0) - (parseInt(t(i).css(\"zIndex\"), 10) || 0);\n      });\n      a.length && (n = parseInt(t(a[0]).css(\"zIndex\"), 10) || 0, t(a).each(function (e) {\n        t(this).css(\"zIndex\", n + e);\n      }), this.css(\"zIndex\", n + a.length));\n    }\n  }), t.ui.plugin.add(\"draggable\", \"zIndex\", {\n    start: function start(e, i, s) {\n      var n = t(i.helper),\n          o = s.options;\n      n.css(\"zIndex\") && (o._zIndex = n.css(\"zIndex\")), n.css(\"zIndex\", o.zIndex);\n    },\n    stop: function stop(e, i, s) {\n      var n = s.options;\n      n._zIndex && t(i.helper).css(\"zIndex\", n._zIndex);\n    }\n  }), t.ui.draggable, t.widget(\"ui.droppable\", {\n    version: \"1.12.1\",\n    widgetEventPrefix: \"drop\",\n    options: {\n      accept: \"*\",\n      addClasses: !0,\n      greedy: !1,\n      scope: \"default\",\n      tolerance: \"intersect\",\n      activate: null,\n      deactivate: null,\n      drop: null,\n      out: null,\n      over: null\n    },\n    _create: function _create() {\n      var e,\n          i = this.options,\n          s = i.accept;\n      this.isover = !1, this.isout = !0, this.accept = t.isFunction(s) ? s : function (t) {\n        return t.is(s);\n      }, this.proportions = function () {\n        return arguments.length ? (e = arguments[0], void 0) : e ? e : e = {\n          width: this.element[0].offsetWidth,\n          height: this.element[0].offsetHeight\n        };\n      }, this._addToManager(i.scope), i.addClasses && this._addClass(\"ui-droppable\");\n    },\n    _addToManager: function _addToManager(e) {\n      t.ui.ddmanager.droppables[e] = t.ui.ddmanager.droppables[e] || [], t.ui.ddmanager.droppables[e].push(this);\n    },\n    _splice: function _splice(t) {\n      for (var e = 0; t.length > e; e++) {\n        t[e] === this && t.splice(e, 1);\n      }\n    },\n    _destroy: function _destroy() {\n      var e = t.ui.ddmanager.droppables[this.options.scope];\n\n      this._splice(e);\n    },\n    _setOption: function _setOption(e, i) {\n      if (\"accept\" === e) this.accept = t.isFunction(i) ? i : function (t) {\n        return t.is(i);\n      };else if (\"scope\" === e) {\n        var s = t.ui.ddmanager.droppables[this.options.scope];\n        this._splice(s), this._addToManager(i);\n      }\n\n      this._super(e, i);\n    },\n    _activate: function _activate(e) {\n      var i = t.ui.ddmanager.current;\n      this._addActiveClass(), i && this._trigger(\"activate\", e, this.ui(i));\n    },\n    _deactivate: function _deactivate(e) {\n      var i = t.ui.ddmanager.current;\n      this._removeActiveClass(), i && this._trigger(\"deactivate\", e, this.ui(i));\n    },\n    _over: function _over(e) {\n      var i = t.ui.ddmanager.current;\n      i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this._addHoverClass(), this._trigger(\"over\", e, this.ui(i)));\n    },\n    _out: function _out(e) {\n      var i = t.ui.ddmanager.current;\n      i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this._removeHoverClass(), this._trigger(\"out\", e, this.ui(i)));\n    },\n    _drop: function _drop(e, i) {\n      var s = i || t.ui.ddmanager.current,\n          o = !1;\n      return s && (s.currentItem || s.element)[0] !== this.element[0] ? (this.element.find(\":data(ui-droppable)\").not(\".ui-draggable-dragging\").each(function () {\n        var i = t(this).droppable(\"instance\");\n        return i.options.greedy && !i.options.disabled && i.options.scope === s.options.scope && i.accept.call(i.element[0], s.currentItem || s.element) && n(s, t.extend(i, {\n          offset: i.element.offset()\n        }), i.options.tolerance, e) ? (o = !0, !1) : void 0;\n      }), o ? !1 : this.accept.call(this.element[0], s.currentItem || s.element) ? (this._removeActiveClass(), this._removeHoverClass(), this._trigger(\"drop\", e, this.ui(s)), this.element) : !1) : !1;\n    },\n    ui: function ui(t) {\n      return {\n        draggable: t.currentItem || t.element,\n        helper: t.helper,\n        position: t.position,\n        offset: t.positionAbs\n      };\n    },\n    _addHoverClass: function _addHoverClass() {\n      this._addClass(\"ui-droppable-hover\");\n    },\n    _removeHoverClass: function _removeHoverClass() {\n      this._removeClass(\"ui-droppable-hover\");\n    },\n    _addActiveClass: function _addActiveClass() {\n      this._addClass(\"ui-droppable-active\");\n    },\n    _removeActiveClass: function _removeActiveClass() {\n      this._removeClass(\"ui-droppable-active\");\n    }\n  });\n\n  var n = t.ui.intersect = function () {\n    function t(t, e, i) {\n      return t >= e && e + i > t;\n    }\n\n    return function (e, i, s, n) {\n      if (!i.offset) return !1;\n      var o = (e.positionAbs || e.position.absolute).left + e.margins.left,\n          a = (e.positionAbs || e.position.absolute).top + e.margins.top,\n          r = o + e.helperProportions.width,\n          h = a + e.helperProportions.height,\n          l = i.offset.left,\n          c = i.offset.top,\n          u = l + i.proportions().width,\n          d = c + i.proportions().height;\n\n      switch (s) {\n        case \"fit\":\n          return o >= l && u >= r && a >= c && d >= h;\n\n        case \"intersect\":\n          return o + e.helperProportions.width / 2 > l && u > r - e.helperProportions.width / 2 && a + e.helperProportions.height / 2 > c && d > h - e.helperProportions.height / 2;\n\n        case \"pointer\":\n          return t(n.pageY, c, i.proportions().height) && t(n.pageX, l, i.proportions().width);\n\n        case \"touch\":\n          return (a >= c && d >= a || h >= c && d >= h || c > a && h > d) && (o >= l && u >= o || r >= l && u >= r || l > o && r > u);\n\n        default:\n          return !1;\n      }\n    };\n  }();\n\n  t.ui.ddmanager = {\n    current: null,\n    droppables: {\n      \"default\": []\n    },\n    prepareOffsets: function prepareOffsets(e, i) {\n      var s,\n          n,\n          o = t.ui.ddmanager.droppables[e.options.scope] || [],\n          a = i ? i.type : null,\n          r = (e.currentItem || e.element).find(\":data(ui-droppable)\").addBack();\n\n      t: for (s = 0; o.length > s; s++) {\n        if (!(o[s].options.disabled || e && !o[s].accept.call(o[s].element[0], e.currentItem || e.element))) {\n          for (n = 0; r.length > n; n++) {\n            if (r[n] === o[s].element[0]) {\n              o[s].proportions().height = 0;\n              continue t;\n            }\n          }\n\n          o[s].visible = \"none\" !== o[s].element.css(\"display\"), o[s].visible && (\"mousedown\" === a && o[s]._activate.call(o[s], i), o[s].offset = o[s].element.offset(), o[s].proportions({\n            width: o[s].element[0].offsetWidth,\n            height: o[s].element[0].offsetHeight\n          }));\n        }\n      }\n    },\n    drop: function drop(e, i) {\n      var s = !1;\n      return t.each((t.ui.ddmanager.droppables[e.options.scope] || []).slice(), function () {\n        this.options && (!this.options.disabled && this.visible && n(e, this, this.options.tolerance, i) && (s = this._drop.call(this, i) || s), !this.options.disabled && this.visible && this.accept.call(this.element[0], e.currentItem || e.element) && (this.isout = !0, this.isover = !1, this._deactivate.call(this, i)));\n      }), s;\n    },\n    dragStart: function dragStart(e, i) {\n      e.element.parentsUntil(\"body\").on(\"scroll.droppable\", function () {\n        e.options.refreshPositions || t.ui.ddmanager.prepareOffsets(e, i);\n      });\n    },\n    drag: function drag(e, i) {\n      e.options.refreshPositions && t.ui.ddmanager.prepareOffsets(e, i), t.each(t.ui.ddmanager.droppables[e.options.scope] || [], function () {\n        if (!this.options.disabled && !this.greedyChild && this.visible) {\n          var s,\n              o,\n              a,\n              r = n(e, this, this.options.tolerance, i),\n              h = !r && this.isover ? \"isout\" : r && !this.isover ? \"isover\" : null;\n          h && (this.options.greedy && (o = this.options.scope, a = this.element.parents(\":data(ui-droppable)\").filter(function () {\n            return t(this).droppable(\"instance\").options.scope === o;\n          }), a.length && (s = t(a[0]).droppable(\"instance\"), s.greedyChild = \"isover\" === h)), s && \"isover\" === h && (s.isover = !1, s.isout = !0, s._out.call(s, i)), this[h] = !0, this[\"isout\" === h ? \"isover\" : \"isout\"] = !1, this[\"isover\" === h ? \"_over\" : \"_out\"].call(this, i), s && \"isout\" === h && (s.isout = !1, s.isover = !0, s._over.call(s, i)));\n        }\n      });\n    },\n    dragStop: function dragStop(e, i) {\n      e.element.parentsUntil(\"body\").off(\"scroll.droppable\"), e.options.refreshPositions || t.ui.ddmanager.prepareOffsets(e, i);\n    }\n  }, t.uiBackCompat !== !1 && t.widget(\"ui.droppable\", t.ui.droppable, {\n    options: {\n      hoverClass: !1,\n      activeClass: !1\n    },\n    _addActiveClass: function _addActiveClass() {\n      this._super(), this.options.activeClass && this.element.addClass(this.options.activeClass);\n    },\n    _removeActiveClass: function _removeActiveClass() {\n      this._super(), this.options.activeClass && this.element.removeClass(this.options.activeClass);\n    },\n    _addHoverClass: function _addHoverClass() {\n      this._super(), this.options.hoverClass && this.element.addClass(this.options.hoverClass);\n    },\n    _removeHoverClass: function _removeHoverClass() {\n      this._super(), this.options.hoverClass && this.element.removeClass(this.options.hoverClass);\n    }\n  }), t.ui.droppable, t.widget(\"ui.resizable\", t.ui.mouse, {\n    version: \"1.12.1\",\n    widgetEventPrefix: \"resize\",\n    options: {\n      alsoResize: !1,\n      animate: !1,\n      animateDuration: \"slow\",\n      animateEasing: \"swing\",\n      aspectRatio: !1,\n      autoHide: !1,\n      classes: {\n        \"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n      },\n      containment: !1,\n      ghost: !1,\n      grid: !1,\n      handles: \"e,s,se\",\n      helper: !1,\n      maxHeight: null,\n      maxWidth: null,\n      minHeight: 10,\n      minWidth: 10,\n      zIndex: 90,\n      resize: null,\n      start: null,\n      stop: null\n    },\n    _num: function _num(t) {\n      return parseFloat(t) || 0;\n    },\n    _isNumber: function _isNumber(t) {\n      return !isNaN(parseFloat(t));\n    },\n    _hasScroll: function _hasScroll(e, i) {\n      if (\"hidden\" === t(e).css(\"overflow\")) return !1;\n      var s = i && \"left\" === i ? \"scrollLeft\" : \"scrollTop\",\n          n = !1;\n      return e[s] > 0 ? !0 : (e[s] = 1, n = e[s] > 0, e[s] = 0, n);\n    },\n    _create: function _create() {\n      var e,\n          i = this.options,\n          s = this;\n      this._addClass(\"ui-resizable\"), t.extend(this, {\n        _aspectRatio: !!i.aspectRatio,\n        aspectRatio: i.aspectRatio,\n        originalElement: this.element,\n        _proportionallyResizeElements: [],\n        _helper: i.helper || i.ghost || i.animate ? i.helper || \"ui-resizable-helper\" : null\n      }), this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i) && (this.element.wrap(t(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({\n        position: this.element.css(\"position\"),\n        width: this.element.outerWidth(),\n        height: this.element.outerHeight(),\n        top: this.element.css(\"top\"),\n        left: this.element.css(\"left\")\n      })), this.element = this.element.parent().data(\"ui-resizable\", this.element.resizable(\"instance\")), this.elementIsWrapper = !0, e = {\n        marginTop: this.originalElement.css(\"marginTop\"),\n        marginRight: this.originalElement.css(\"marginRight\"),\n        marginBottom: this.originalElement.css(\"marginBottom\"),\n        marginLeft: this.originalElement.css(\"marginLeft\")\n      }, this.element.css(e), this.originalElement.css(\"margin\", 0), this.originalResizeStyle = this.originalElement.css(\"resize\"), this.originalElement.css(\"resize\", \"none\"), this._proportionallyResizeElements.push(this.originalElement.css({\n        position: \"static\",\n        zoom: 1,\n        display: \"block\"\n      })), this.originalElement.css(e), this._proportionallyResize()), this._setupHandles(), i.autoHide && t(this.element).on(\"mouseenter\", function () {\n        i.disabled || (s._removeClass(\"ui-resizable-autohide\"), s._handles.show());\n      }).on(\"mouseleave\", function () {\n        i.disabled || s.resizing || (s._addClass(\"ui-resizable-autohide\"), s._handles.hide());\n      }), this._mouseInit();\n    },\n    _destroy: function _destroy() {\n      this._mouseDestroy();\n\n      var e,\n          i = function i(e) {\n        t(e).removeData(\"resizable\").removeData(\"ui-resizable\").off(\".resizable\").find(\".ui-resizable-handle\").remove();\n      };\n\n      return this.elementIsWrapper && (i(this.element), e = this.element, this.originalElement.css({\n        position: e.css(\"position\"),\n        width: e.outerWidth(),\n        height: e.outerHeight(),\n        top: e.css(\"top\"),\n        left: e.css(\"left\")\n      }).insertAfter(e), e.remove()), this.originalElement.css(\"resize\", this.originalResizeStyle), i(this.originalElement), this;\n    },\n    _setOption: function _setOption(t, e) {\n      switch (this._super(t, e), t) {\n        case \"handles\":\n          this._removeHandles(), this._setupHandles();\n          break;\n\n        default:\n      }\n    },\n    _setupHandles: function _setupHandles() {\n      var e,\n          i,\n          s,\n          n,\n          o,\n          a = this.options,\n          r = this;\n      if (this.handles = a.handles || (t(\".ui-resizable-handle\", this.element).length ? {\n        n: \".ui-resizable-n\",\n        e: \".ui-resizable-e\",\n        s: \".ui-resizable-s\",\n        w: \".ui-resizable-w\",\n        se: \".ui-resizable-se\",\n        sw: \".ui-resizable-sw\",\n        ne: \".ui-resizable-ne\",\n        nw: \".ui-resizable-nw\"\n      } : \"e,s,se\"), this._handles = t(), this.handles.constructor === String) for (\"all\" === this.handles && (this.handles = \"n,e,s,w,se,sw,ne,nw\"), s = this.handles.split(\",\"), this.handles = {}, i = 0; s.length > i; i++) {\n        e = t.trim(s[i]), n = \"ui-resizable-\" + e, o = t(\"<div>\"), this._addClass(o, \"ui-resizable-handle \" + n), o.css({\n          zIndex: a.zIndex\n        }), this.handles[e] = \".ui-resizable-\" + e, this.element.append(o);\n      }\n      this._renderAxis = function (e) {\n        var i, s, n, o;\n        e = e || this.element;\n\n        for (i in this.handles) {\n          this.handles[i].constructor === String ? this.handles[i] = this.element.children(this.handles[i]).first().show() : (this.handles[i].jquery || this.handles[i].nodeType) && (this.handles[i] = t(this.handles[i]), this._on(this.handles[i], {\n            mousedown: r._mouseDown\n          })), this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i) && (s = t(this.handles[i], this.element), o = /sw|ne|nw|se|n|s/.test(i) ? s.outerHeight() : s.outerWidth(), n = [\"padding\", /ne|nw|n/.test(i) ? \"Top\" : /se|sw|s/.test(i) ? \"Bottom\" : /^e$/.test(i) ? \"Right\" : \"Left\"].join(\"\"), e.css(n, o), this._proportionallyResize()), this._handles = this._handles.add(this.handles[i]);\n        }\n      }, this._renderAxis(this.element), this._handles = this._handles.add(this.element.find(\".ui-resizable-handle\")), this._handles.disableSelection(), this._handles.on(\"mouseover\", function () {\n        r.resizing || (this.className && (o = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)), r.axis = o && o[1] ? o[1] : \"se\");\n      }), a.autoHide && (this._handles.hide(), this._addClass(\"ui-resizable-autohide\"));\n    },\n    _removeHandles: function _removeHandles() {\n      this._handles.remove();\n    },\n    _mouseCapture: function _mouseCapture(e) {\n      var i,\n          s,\n          n = !1;\n\n      for (i in this.handles) {\n        s = t(this.handles[i])[0], (s === e.target || t.contains(s, e.target)) && (n = !0);\n      }\n\n      return !this.options.disabled && n;\n    },\n    _mouseStart: function _mouseStart(e) {\n      var i,\n          s,\n          n,\n          o = this.options,\n          a = this.element;\n      return this.resizing = !0, this._renderProxy(), i = this._num(this.helper.css(\"left\")), s = this._num(this.helper.css(\"top\")), o.containment && (i += t(o.containment).scrollLeft() || 0, s += t(o.containment).scrollTop() || 0), this.offset = this.helper.offset(), this.position = {\n        left: i,\n        top: s\n      }, this.size = this._helper ? {\n        width: this.helper.width(),\n        height: this.helper.height()\n      } : {\n        width: a.width(),\n        height: a.height()\n      }, this.originalSize = this._helper ? {\n        width: a.outerWidth(),\n        height: a.outerHeight()\n      } : {\n        width: a.width(),\n        height: a.height()\n      }, this.sizeDiff = {\n        width: a.outerWidth() - a.width(),\n        height: a.outerHeight() - a.height()\n      }, this.originalPosition = {\n        left: i,\n        top: s\n      }, this.originalMousePosition = {\n        left: e.pageX,\n        top: e.pageY\n      }, this.aspectRatio = \"number\" == typeof o.aspectRatio ? o.aspectRatio : this.originalSize.width / this.originalSize.height || 1, n = t(\".ui-resizable-\" + this.axis).css(\"cursor\"), t(\"body\").css(\"cursor\", \"auto\" === n ? this.axis + \"-resize\" : n), this._addClass(\"ui-resizable-resizing\"), this._propagate(\"start\", e), !0;\n    },\n    _mouseDrag: function _mouseDrag(e) {\n      var i,\n          s,\n          n = this.originalMousePosition,\n          o = this.axis,\n          a = e.pageX - n.left || 0,\n          r = e.pageY - n.top || 0,\n          h = this._change[o];\n      return this._updatePrevProperties(), h ? (i = h.apply(this, [e, a, r]), this._updateVirtualBoundaries(e.shiftKey), (this._aspectRatio || e.shiftKey) && (i = this._updateRatio(i, e)), i = this._respectSize(i, e), this._updateCache(i), this._propagate(\"resize\", e), s = this._applyChanges(), !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(), t.isEmptyObject(s) || (this._updatePrevProperties(), this._trigger(\"resize\", e, this.ui()), this._applyChanges()), !1) : !1;\n    },\n    _mouseStop: function _mouseStop(e) {\n      this.resizing = !1;\n      var i,\n          s,\n          n,\n          o,\n          a,\n          r,\n          h,\n          l = this.options,\n          c = this;\n      return this._helper && (i = this._proportionallyResizeElements, s = i.length && /textarea/i.test(i[0].nodeName), n = s && this._hasScroll(i[0], \"left\") ? 0 : c.sizeDiff.height, o = s ? 0 : c.sizeDiff.width, a = {\n        width: c.helper.width() - o,\n        height: c.helper.height() - n\n      }, r = parseFloat(c.element.css(\"left\")) + (c.position.left - c.originalPosition.left) || null, h = parseFloat(c.element.css(\"top\")) + (c.position.top - c.originalPosition.top) || null, l.animate || this.element.css(t.extend(a, {\n        top: h,\n        left: r\n      })), c.helper.height(c.size.height), c.helper.width(c.size.width), this._helper && !l.animate && this._proportionallyResize()), t(\"body\").css(\"cursor\", \"auto\"), this._removeClass(\"ui-resizable-resizing\"), this._propagate(\"stop\", e), this._helper && this.helper.remove(), !1;\n    },\n    _updatePrevProperties: function _updatePrevProperties() {\n      this.prevPosition = {\n        top: this.position.top,\n        left: this.position.left\n      }, this.prevSize = {\n        width: this.size.width,\n        height: this.size.height\n      };\n    },\n    _applyChanges: function _applyChanges() {\n      var t = {};\n      return this.position.top !== this.prevPosition.top && (t.top = this.position.top + \"px\"), this.position.left !== this.prevPosition.left && (t.left = this.position.left + \"px\"), this.size.width !== this.prevSize.width && (t.width = this.size.width + \"px\"), this.size.height !== this.prevSize.height && (t.height = this.size.height + \"px\"), this.helper.css(t), t;\n    },\n    _updateVirtualBoundaries: function _updateVirtualBoundaries(t) {\n      var e,\n          i,\n          s,\n          n,\n          o,\n          a = this.options;\n      o = {\n        minWidth: this._isNumber(a.minWidth) ? a.minWidth : 0,\n        maxWidth: this._isNumber(a.maxWidth) ? a.maxWidth : 1 / 0,\n        minHeight: this._isNumber(a.minHeight) ? a.minHeight : 0,\n        maxHeight: this._isNumber(a.maxHeight) ? a.maxHeight : 1 / 0\n      }, (this._aspectRatio || t) && (e = o.minHeight * this.aspectRatio, s = o.minWidth / this.aspectRatio, i = o.maxHeight * this.aspectRatio, n = o.maxWidth / this.aspectRatio, e > o.minWidth && (o.minWidth = e), s > o.minHeight && (o.minHeight = s), o.maxWidth > i && (o.maxWidth = i), o.maxHeight > n && (o.maxHeight = n)), this._vBoundaries = o;\n    },\n    _updateCache: function _updateCache(t) {\n      this.offset = this.helper.offset(), this._isNumber(t.left) && (this.position.left = t.left), this._isNumber(t.top) && (this.position.top = t.top), this._isNumber(t.height) && (this.size.height = t.height), this._isNumber(t.width) && (this.size.width = t.width);\n    },\n    _updateRatio: function _updateRatio(t) {\n      var e = this.position,\n          i = this.size,\n          s = this.axis;\n      return this._isNumber(t.height) ? t.width = t.height * this.aspectRatio : this._isNumber(t.width) && (t.height = t.width / this.aspectRatio), \"sw\" === s && (t.left = e.left + (i.width - t.width), t.top = null), \"nw\" === s && (t.top = e.top + (i.height - t.height), t.left = e.left + (i.width - t.width)), t;\n    },\n    _respectSize: function _respectSize(t) {\n      var e = this._vBoundaries,\n          i = this.axis,\n          s = this._isNumber(t.width) && e.maxWidth && e.maxWidth < t.width,\n          n = this._isNumber(t.height) && e.maxHeight && e.maxHeight < t.height,\n          o = this._isNumber(t.width) && e.minWidth && e.minWidth > t.width,\n          a = this._isNumber(t.height) && e.minHeight && e.minHeight > t.height,\n          r = this.originalPosition.left + this.originalSize.width,\n          h = this.originalPosition.top + this.originalSize.height,\n          l = /sw|nw|w/.test(i),\n          c = /nw|ne|n/.test(i);\n      return o && (t.width = e.minWidth), a && (t.height = e.minHeight), s && (t.width = e.maxWidth), n && (t.height = e.maxHeight), o && l && (t.left = r - e.minWidth), s && l && (t.left = r - e.maxWidth), a && c && (t.top = h - e.minHeight), n && c && (t.top = h - e.maxHeight), t.width || t.height || t.left || !t.top ? t.width || t.height || t.top || !t.left || (t.left = null) : t.top = null, t;\n    },\n    _getPaddingPlusBorderDimensions: function _getPaddingPlusBorderDimensions(t) {\n      for (var e = 0, i = [], s = [t.css(\"borderTopWidth\"), t.css(\"borderRightWidth\"), t.css(\"borderBottomWidth\"), t.css(\"borderLeftWidth\")], n = [t.css(\"paddingTop\"), t.css(\"paddingRight\"), t.css(\"paddingBottom\"), t.css(\"paddingLeft\")]; 4 > e; e++) {\n        i[e] = parseFloat(s[e]) || 0, i[e] += parseFloat(n[e]) || 0;\n      }\n\n      return {\n        height: i[0] + i[2],\n        width: i[1] + i[3]\n      };\n    },\n    _proportionallyResize: function _proportionallyResize() {\n      if (this._proportionallyResizeElements.length) for (var t, e = 0, i = this.helper || this.element; this._proportionallyResizeElements.length > e; e++) {\n        t = this._proportionallyResizeElements[e], this.outerDimensions || (this.outerDimensions = this._getPaddingPlusBorderDimensions(t)), t.css({\n          height: i.height() - this.outerDimensions.height || 0,\n          width: i.width() - this.outerDimensions.width || 0\n        });\n      }\n    },\n    _renderProxy: function _renderProxy() {\n      var e = this.element,\n          i = this.options;\n      this.elementOffset = e.offset(), this._helper ? (this.helper = this.helper || t(\"<div style='overflow:hidden;'></div>\"), this._addClass(this.helper, this._helper), this.helper.css({\n        width: this.element.outerWidth(),\n        height: this.element.outerHeight(),\n        position: \"absolute\",\n        left: this.elementOffset.left + \"px\",\n        top: this.elementOffset.top + \"px\",\n        zIndex: ++i.zIndex\n      }), this.helper.appendTo(\"body\").disableSelection()) : this.helper = this.element;\n    },\n    _change: {\n      e: function e(t, _e) {\n        return {\n          width: this.originalSize.width + _e\n        };\n      },\n      w: function w(t, e) {\n        var i = this.originalSize,\n            s = this.originalPosition;\n        return {\n          left: s.left + e,\n          width: i.width - e\n        };\n      },\n      n: function n(t, e, i) {\n        var s = this.originalSize,\n            n = this.originalPosition;\n        return {\n          top: n.top + i,\n          height: s.height - i\n        };\n      },\n      s: function s(t, e, i) {\n        return {\n          height: this.originalSize.height + i\n        };\n      },\n      se: function se(e, i, s) {\n        return t.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [e, i, s]));\n      },\n      sw: function sw(e, i, s) {\n        return t.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [e, i, s]));\n      },\n      ne: function ne(e, i, s) {\n        return t.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [e, i, s]));\n      },\n      nw: function nw(e, i, s) {\n        return t.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [e, i, s]));\n      }\n    },\n    _propagate: function _propagate(e, i) {\n      t.ui.plugin.call(this, e, [i, this.ui()]), \"resize\" !== e && this._trigger(e, i, this.ui());\n    },\n    plugins: {},\n    ui: function ui() {\n      return {\n        originalElement: this.originalElement,\n        element: this.element,\n        helper: this.helper,\n        position: this.position,\n        size: this.size,\n        originalSize: this.originalSize,\n        originalPosition: this.originalPosition\n      };\n    }\n  }), t.ui.plugin.add(\"resizable\", \"animate\", {\n    stop: function stop(e) {\n      var i = t(this).resizable(\"instance\"),\n          s = i.options,\n          n = i._proportionallyResizeElements,\n          o = n.length && /textarea/i.test(n[0].nodeName),\n          a = o && i._hasScroll(n[0], \"left\") ? 0 : i.sizeDiff.height,\n          r = o ? 0 : i.sizeDiff.width,\n          h = {\n        width: i.size.width - r,\n        height: i.size.height - a\n      },\n          l = parseFloat(i.element.css(\"left\")) + (i.position.left - i.originalPosition.left) || null,\n          c = parseFloat(i.element.css(\"top\")) + (i.position.top - i.originalPosition.top) || null;\n      i.element.animate(t.extend(h, c && l ? {\n        top: c,\n        left: l\n      } : {}), {\n        duration: s.animateDuration,\n        easing: s.animateEasing,\n        step: function step() {\n          var s = {\n            width: parseFloat(i.element.css(\"width\")),\n            height: parseFloat(i.element.css(\"height\")),\n            top: parseFloat(i.element.css(\"top\")),\n            left: parseFloat(i.element.css(\"left\"))\n          };\n          n && n.length && t(n[0]).css({\n            width: s.width,\n            height: s.height\n          }), i._updateCache(s), i._propagate(\"resize\", e);\n        }\n      });\n    }\n  }), t.ui.plugin.add(\"resizable\", \"containment\", {\n    start: function start() {\n      var e,\n          i,\n          s,\n          n,\n          o,\n          a,\n          r,\n          h = t(this).resizable(\"instance\"),\n          l = h.options,\n          c = h.element,\n          u = l.containment,\n          d = u instanceof t ? u.get(0) : /parent/.test(u) ? c.parent().get(0) : u;\n      d && (h.containerElement = t(d), /document/.test(u) || u === document ? (h.containerOffset = {\n        left: 0,\n        top: 0\n      }, h.containerPosition = {\n        left: 0,\n        top: 0\n      }, h.parentData = {\n        element: t(document),\n        left: 0,\n        top: 0,\n        width: t(document).width(),\n        height: t(document).height() || document.body.parentNode.scrollHeight\n      }) : (e = t(d), i = [], t([\"Top\", \"Right\", \"Left\", \"Bottom\"]).each(function (t, s) {\n        i[t] = h._num(e.css(\"padding\" + s));\n      }), h.containerOffset = e.offset(), h.containerPosition = e.position(), h.containerSize = {\n        height: e.innerHeight() - i[3],\n        width: e.innerWidth() - i[1]\n      }, s = h.containerOffset, n = h.containerSize.height, o = h.containerSize.width, a = h._hasScroll(d, \"left\") ? d.scrollWidth : o, r = h._hasScroll(d) ? d.scrollHeight : n, h.parentData = {\n        element: d,\n        left: s.left,\n        top: s.top,\n        width: a,\n        height: r\n      }));\n    },\n    resize: function resize(e) {\n      var i,\n          s,\n          n,\n          o,\n          a = t(this).resizable(\"instance\"),\n          r = a.options,\n          h = a.containerOffset,\n          l = a.position,\n          c = a._aspectRatio || e.shiftKey,\n          u = {\n        top: 0,\n        left: 0\n      },\n          d = a.containerElement,\n          p = !0;\n      d[0] !== document && /static/.test(d.css(\"position\")) && (u = h), l.left < (a._helper ? h.left : 0) && (a.size.width = a.size.width + (a._helper ? a.position.left - h.left : a.position.left - u.left), c && (a.size.height = a.size.width / a.aspectRatio, p = !1), a.position.left = r.helper ? h.left : 0), l.top < (a._helper ? h.top : 0) && (a.size.height = a.size.height + (a._helper ? a.position.top - h.top : a.position.top), c && (a.size.width = a.size.height * a.aspectRatio, p = !1), a.position.top = a._helper ? h.top : 0), n = a.containerElement.get(0) === a.element.parent().get(0), o = /relative|absolute/.test(a.containerElement.css(\"position\")), n && o ? (a.offset.left = a.parentData.left + a.position.left, a.offset.top = a.parentData.top + a.position.top) : (a.offset.left = a.element.offset().left, a.offset.top = a.element.offset().top), i = Math.abs(a.sizeDiff.width + (a._helper ? a.offset.left - u.left : a.offset.left - h.left)), s = Math.abs(a.sizeDiff.height + (a._helper ? a.offset.top - u.top : a.offset.top - h.top)), i + a.size.width >= a.parentData.width && (a.size.width = a.parentData.width - i, c && (a.size.height = a.size.width / a.aspectRatio, p = !1)), s + a.size.height >= a.parentData.height && (a.size.height = a.parentData.height - s, c && (a.size.width = a.size.height * a.aspectRatio, p = !1)), p || (a.position.left = a.prevPosition.left, a.position.top = a.prevPosition.top, a.size.width = a.prevSize.width, a.size.height = a.prevSize.height);\n    },\n    stop: function stop() {\n      var e = t(this).resizable(\"instance\"),\n          i = e.options,\n          s = e.containerOffset,\n          n = e.containerPosition,\n          o = e.containerElement,\n          a = t(e.helper),\n          r = a.offset(),\n          h = a.outerWidth() - e.sizeDiff.width,\n          l = a.outerHeight() - e.sizeDiff.height;\n      e._helper && !i.animate && /relative/.test(o.css(\"position\")) && t(this).css({\n        left: r.left - n.left - s.left,\n        width: h,\n        height: l\n      }), e._helper && !i.animate && /static/.test(o.css(\"position\")) && t(this).css({\n        left: r.left - n.left - s.left,\n        width: h,\n        height: l\n      });\n    }\n  }), t.ui.plugin.add(\"resizable\", \"alsoResize\", {\n    start: function start() {\n      var e = t(this).resizable(\"instance\"),\n          i = e.options;\n      t(i.alsoResize).each(function () {\n        var e = t(this);\n        e.data(\"ui-resizable-alsoresize\", {\n          width: parseFloat(e.width()),\n          height: parseFloat(e.height()),\n          left: parseFloat(e.css(\"left\")),\n          top: parseFloat(e.css(\"top\"))\n        });\n      });\n    },\n    resize: function resize(e, i) {\n      var s = t(this).resizable(\"instance\"),\n          n = s.options,\n          o = s.originalSize,\n          a = s.originalPosition,\n          r = {\n        height: s.size.height - o.height || 0,\n        width: s.size.width - o.width || 0,\n        top: s.position.top - a.top || 0,\n        left: s.position.left - a.left || 0\n      };\n      t(n.alsoResize).each(function () {\n        var e = t(this),\n            s = t(this).data(\"ui-resizable-alsoresize\"),\n            n = {},\n            o = e.parents(i.originalElement[0]).length ? [\"width\", \"height\"] : [\"width\", \"height\", \"top\", \"left\"];\n        t.each(o, function (t, e) {\n          var i = (s[e] || 0) + (r[e] || 0);\n          i && i >= 0 && (n[e] = i || null);\n        }), e.css(n);\n      });\n    },\n    stop: function stop() {\n      t(this).removeData(\"ui-resizable-alsoresize\");\n    }\n  }), t.ui.plugin.add(\"resizable\", \"ghost\", {\n    start: function start() {\n      var e = t(this).resizable(\"instance\"),\n          i = e.size;\n      e.ghost = e.originalElement.clone(), e.ghost.css({\n        opacity: .25,\n        display: \"block\",\n        position: \"relative\",\n        height: i.height,\n        width: i.width,\n        margin: 0,\n        left: 0,\n        top: 0\n      }), e._addClass(e.ghost, \"ui-resizable-ghost\"), t.uiBackCompat !== !1 && \"string\" == typeof e.options.ghost && e.ghost.addClass(this.options.ghost), e.ghost.appendTo(e.helper);\n    },\n    resize: function resize() {\n      var e = t(this).resizable(\"instance\");\n      e.ghost && e.ghost.css({\n        position: \"relative\",\n        height: e.size.height,\n        width: e.size.width\n      });\n    },\n    stop: function stop() {\n      var e = t(this).resizable(\"instance\");\n      e.ghost && e.helper && e.helper.get(0).removeChild(e.ghost.get(0));\n    }\n  }), t.ui.plugin.add(\"resizable\", \"grid\", {\n    resize: function resize() {\n      var e,\n          i = t(this).resizable(\"instance\"),\n          s = i.options,\n          n = i.size,\n          o = i.originalSize,\n          a = i.originalPosition,\n          r = i.axis,\n          h = \"number\" == typeof s.grid ? [s.grid, s.grid] : s.grid,\n          l = h[0] || 1,\n          c = h[1] || 1,\n          u = Math.round((n.width - o.width) / l) * l,\n          d = Math.round((n.height - o.height) / c) * c,\n          p = o.width + u,\n          f = o.height + d,\n          m = s.maxWidth && p > s.maxWidth,\n          g = s.maxHeight && f > s.maxHeight,\n          _ = s.minWidth && s.minWidth > p,\n          v = s.minHeight && s.minHeight > f;\n\n      s.grid = h, _ && (p += l), v && (f += c), m && (p -= l), g && (f -= c), /^(se|s|e)$/.test(r) ? (i.size.width = p, i.size.height = f) : /^(ne)$/.test(r) ? (i.size.width = p, i.size.height = f, i.position.top = a.top - d) : /^(sw)$/.test(r) ? (i.size.width = p, i.size.height = f, i.position.left = a.left - u) : ((0 >= f - c || 0 >= p - l) && (e = i._getPaddingPlusBorderDimensions(this)), f - c > 0 ? (i.size.height = f, i.position.top = a.top - d) : (f = c - e.height, i.size.height = f, i.position.top = a.top + o.height - f), p - l > 0 ? (i.size.width = p, i.position.left = a.left - u) : (p = l - e.width, i.size.width = p, i.position.left = a.left + o.width - p));\n    }\n  }), t.ui.resizable, t.widget(\"ui.sortable\", t.ui.mouse, {\n    version: \"1.12.1\",\n    widgetEventPrefix: \"sort\",\n    ready: !1,\n    options: {\n      appendTo: \"parent\",\n      axis: !1,\n      connectWith: !1,\n      containment: !1,\n      cursor: \"auto\",\n      cursorAt: !1,\n      dropOnEmpty: !0,\n      forcePlaceholderSize: !1,\n      forceHelperSize: !1,\n      grid: !1,\n      handle: !1,\n      helper: \"original\",\n      items: \"> *\",\n      opacity: !1,\n      placeholder: !1,\n      revert: !1,\n      scroll: !0,\n      scrollSensitivity: 20,\n      scrollSpeed: 20,\n      scope: \"default\",\n      tolerance: \"intersect\",\n      zIndex: 1e3,\n      activate: null,\n      beforeStop: null,\n      change: null,\n      deactivate: null,\n      out: null,\n      over: null,\n      receive: null,\n      remove: null,\n      sort: null,\n      start: null,\n      stop: null,\n      update: null\n    },\n    _isOverAxis: function _isOverAxis(t, e, i) {\n      return t >= e && e + i > t;\n    },\n    _isFloating: function _isFloating(t) {\n      return /left|right/.test(t.css(\"float\")) || /inline|table-cell/.test(t.css(\"display\"));\n    },\n    _create: function _create() {\n      this.containerCache = {}, this._addClass(\"ui-sortable\"), this.refresh(), this.offset = this.element.offset(), this._mouseInit(), this._setHandleClassName(), this.ready = !0;\n    },\n    _setOption: function _setOption(t, e) {\n      this._super(t, e), \"handle\" === t && this._setHandleClassName();\n    },\n    _setHandleClassName: function _setHandleClassName() {\n      var e = this;\n      this._removeClass(this.element.find(\".ui-sortable-handle\"), \"ui-sortable-handle\"), t.each(this.items, function () {\n        e._addClass(this.instance.options.handle ? this.item.find(this.instance.options.handle) : this.item, \"ui-sortable-handle\");\n      });\n    },\n    _destroy: function _destroy() {\n      this._mouseDestroy();\n\n      for (var t = this.items.length - 1; t >= 0; t--) {\n        this.items[t].item.removeData(this.widgetName + \"-item\");\n      }\n\n      return this;\n    },\n    _mouseCapture: function _mouseCapture(e, i) {\n      var s = null,\n          n = !1,\n          o = this;\n      return this.reverting ? !1 : this.options.disabled || \"static\" === this.options.type ? !1 : (this._refreshItems(e), t(e.target).parents().each(function () {\n        return t.data(this, o.widgetName + \"-item\") === o ? (s = t(this), !1) : void 0;\n      }), t.data(e.target, o.widgetName + \"-item\") === o && (s = t(e.target)), s ? !this.options.handle || i || (t(this.options.handle, s).find(\"*\").addBack().each(function () {\n        this === e.target && (n = !0);\n      }), n) ? (this.currentItem = s, this._removeCurrentsFromItems(), !0) : !1 : !1);\n    },\n    _mouseStart: function _mouseStart(e, i, s) {\n      var n,\n          o,\n          a = this.options;\n      if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(e), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {\n        top: this.offset.top - this.margins.top,\n        left: this.offset.left - this.margins.left\n      }, t.extend(this.offset, {\n        click: {\n          left: e.pageX - this.offset.left,\n          top: e.pageY - this.offset.top\n        },\n        parent: this._getParentOffset(),\n        relative: this._getRelativeOffset()\n      }), this.helper.css(\"position\", \"absolute\"), this.cssPosition = this.helper.css(\"position\"), this.originalPosition = this._generatePosition(e), this.originalPageX = e.pageX, this.originalPageY = e.pageY, a.cursorAt && this._adjustOffsetFromHelper(a.cursorAt), this.domPosition = {\n        prev: this.currentItem.prev()[0],\n        parent: this.currentItem.parent()[0]\n      }, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), a.containment && this._setContainment(), a.cursor && \"auto\" !== a.cursor && (o = this.document.find(\"body\"), this.storedCursor = o.css(\"cursor\"), o.css(\"cursor\", a.cursor), this.storedStylesheet = t(\"<style>*{ cursor: \" + a.cursor + \" !important; }</style>\").appendTo(o)), a.opacity && (this.helper.css(\"opacity\") && (this._storedOpacity = this.helper.css(\"opacity\")), this.helper.css(\"opacity\", a.opacity)), a.zIndex && (this.helper.css(\"zIndex\") && (this._storedZIndex = this.helper.css(\"zIndex\")), this.helper.css(\"zIndex\", a.zIndex)), this.scrollParent[0] !== this.document[0] && \"HTML\" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger(\"start\", e, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !s) for (n = this.containers.length - 1; n >= 0; n--) {\n        this.containers[n]._trigger(\"activate\", e, this._uiHash(this));\n      }\n      return t.ui.ddmanager && (t.ui.ddmanager.current = this), t.ui.ddmanager && !a.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e), this.dragging = !0, this._addClass(this.helper, \"ui-sortable-helper\"), this._mouseDrag(e), !0;\n    },\n    _mouseDrag: function _mouseDrag(e) {\n      var i,\n          s,\n          n,\n          o,\n          a = this.options,\n          r = !1;\n\n      for (this.position = this._generatePosition(e), this.positionAbs = this._convertPositionTo(\"absolute\"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== this.document[0] && \"HTML\" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - e.pageY < a.scrollSensitivity ? this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop + a.scrollSpeed : e.pageY - this.overflowOffset.top < a.scrollSensitivity && (this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop - a.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - e.pageX < a.scrollSensitivity ? this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft + a.scrollSpeed : e.pageX - this.overflowOffset.left < a.scrollSensitivity && (this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft - a.scrollSpeed)) : (e.pageY - this.document.scrollTop() < a.scrollSensitivity ? r = this.document.scrollTop(this.document.scrollTop() - a.scrollSpeed) : this.window.height() - (e.pageY - this.document.scrollTop()) < a.scrollSensitivity && (r = this.document.scrollTop(this.document.scrollTop() + a.scrollSpeed)), e.pageX - this.document.scrollLeft() < a.scrollSensitivity ? r = this.document.scrollLeft(this.document.scrollLeft() - a.scrollSpeed) : this.window.width() - (e.pageX - this.document.scrollLeft()) < a.scrollSensitivity && (r = this.document.scrollLeft(this.document.scrollLeft() + a.scrollSpeed))), r !== !1 && t.ui.ddmanager && !a.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e)), this.positionAbs = this._convertPositionTo(\"absolute\"), this.options.axis && \"y\" === this.options.axis || (this.helper[0].style.left = this.position.left + \"px\"), this.options.axis && \"x\" === this.options.axis || (this.helper[0].style.top = this.position.top + \"px\"), i = this.items.length - 1; i >= 0; i--) {\n        if (s = this.items[i], n = s.item[0], o = this._intersectsWithPointer(s), o && s.instance === this.currentContainer && n !== this.currentItem[0] && this.placeholder[1 === o ? \"next\" : \"prev\"]()[0] !== n && !t.contains(this.placeholder[0], n) && (\"semi-dynamic\" === this.options.type ? !t.contains(this.element[0], n) : !0)) {\n          if (this.direction = 1 === o ? \"down\" : \"up\", \"pointer\" !== this.options.tolerance && !this._intersectsWithSides(s)) break;\n          this._rearrange(e, s), this._trigger(\"change\", e, this._uiHash());\n          break;\n        }\n      }\n\n      return this._contactContainers(e), t.ui.ddmanager && t.ui.ddmanager.drag(this, e), this._trigger(\"sort\", e, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1;\n    },\n    _mouseStop: function _mouseStop(e, i) {\n      if (e) {\n        if (t.ui.ddmanager && !this.options.dropBehaviour && t.ui.ddmanager.drop(this, e), this.options.revert) {\n          var s = this,\n              n = this.placeholder.offset(),\n              o = this.options.axis,\n              a = {};\n          o && \"x\" !== o || (a.left = n.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft)), o && \"y\" !== o || (a.top = n.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, t(this.helper).animate(a, parseInt(this.options.revert, 10) || 500, function () {\n            s._clear(e);\n          });\n        } else this._clear(e, i);\n\n        return !1;\n      }\n    },\n    cancel: function cancel() {\n      if (this.dragging) {\n        this._mouseUp(new t.Event(\"mouseup\", {\n          target: null\n        })), \"original\" === this.options.helper ? (this.currentItem.css(this._storedCSS), this._removeClass(this.currentItem, \"ui-sortable-helper\")) : this.currentItem.show();\n\n        for (var e = this.containers.length - 1; e >= 0; e--) {\n          this.containers[e]._trigger(\"deactivate\", null, this._uiHash(this)), this.containers[e].containerCache.over && (this.containers[e]._trigger(\"out\", null, this._uiHash(this)), this.containers[e].containerCache.over = 0);\n        }\n      }\n\n      return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), \"original\" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), t.extend(this, {\n        helper: null,\n        dragging: !1,\n        reverting: !1,\n        _noFinalSort: null\n      }), this.domPosition.prev ? t(this.domPosition.prev).after(this.currentItem) : t(this.domPosition.parent).prepend(this.currentItem)), this;\n    },\n    serialize: function serialize(e) {\n      var i = this._getItemsAsjQuery(e && e.connected),\n          s = [];\n\n      return e = e || {}, t(i).each(function () {\n        var i = (t(e.item || this).attr(e.attribute || \"id\") || \"\").match(e.expression || /(.+)[\\-=_](.+)/);\n        i && s.push((e.key || i[1] + \"[]\") + \"=\" + (e.key && e.expression ? i[1] : i[2]));\n      }), !s.length && e.key && s.push(e.key + \"=\"), s.join(\"&\");\n    },\n    toArray: function toArray(e) {\n      var i = this._getItemsAsjQuery(e && e.connected),\n          s = [];\n\n      return e = e || {}, i.each(function () {\n        s.push(t(e.item || this).attr(e.attribute || \"id\") || \"\");\n      }), s;\n    },\n    _intersectsWith: function _intersectsWith(t) {\n      var e = this.positionAbs.left,\n          i = e + this.helperProportions.width,\n          s = this.positionAbs.top,\n          n = s + this.helperProportions.height,\n          o = t.left,\n          a = o + t.width,\n          r = t.top,\n          h = r + t.height,\n          l = this.offset.click.top,\n          c = this.offset.click.left,\n          u = \"x\" === this.options.axis || s + l > r && h > s + l,\n          d = \"y\" === this.options.axis || e + c > o && a > e + c,\n          p = u && d;\n      return \"pointer\" === this.options.tolerance || this.options.forcePointerForContainers || \"pointer\" !== this.options.tolerance && this.helperProportions[this.floating ? \"width\" : \"height\"] > t[this.floating ? \"width\" : \"height\"] ? p : e + this.helperProportions.width / 2 > o && a > i - this.helperProportions.width / 2 && s + this.helperProportions.height / 2 > r && h > n - this.helperProportions.height / 2;\n    },\n    _intersectsWithPointer: function _intersectsWithPointer(t) {\n      var e,\n          i,\n          s = \"x\" === this.options.axis || this._isOverAxis(this.positionAbs.top + this.offset.click.top, t.top, t.height),\n          n = \"y\" === this.options.axis || this._isOverAxis(this.positionAbs.left + this.offset.click.left, t.left, t.width),\n          o = s && n;\n\n      return o ? (e = this._getDragVerticalDirection(), i = this._getDragHorizontalDirection(), this.floating ? \"right\" === i || \"down\" === e ? 2 : 1 : e && (\"down\" === e ? 2 : 1)) : !1;\n    },\n    _intersectsWithSides: function _intersectsWithSides(t) {\n      var e = this._isOverAxis(this.positionAbs.top + this.offset.click.top, t.top + t.height / 2, t.height),\n          i = this._isOverAxis(this.positionAbs.left + this.offset.click.left, t.left + t.width / 2, t.width),\n          s = this._getDragVerticalDirection(),\n          n = this._getDragHorizontalDirection();\n\n      return this.floating && n ? \"right\" === n && i || \"left\" === n && !i : s && (\"down\" === s && e || \"up\" === s && !e);\n    },\n    _getDragVerticalDirection: function _getDragVerticalDirection() {\n      var t = this.positionAbs.top - this.lastPositionAbs.top;\n      return 0 !== t && (t > 0 ? \"down\" : \"up\");\n    },\n    _getDragHorizontalDirection: function _getDragHorizontalDirection() {\n      var t = this.positionAbs.left - this.lastPositionAbs.left;\n      return 0 !== t && (t > 0 ? \"right\" : \"left\");\n    },\n    refresh: function refresh(t) {\n      return this._refreshItems(t), this._setHandleClassName(), this.refreshPositions(), this;\n    },\n    _connectWith: function _connectWith() {\n      var t = this.options;\n      return t.connectWith.constructor === String ? [t.connectWith] : t.connectWith;\n    },\n    _getItemsAsjQuery: function _getItemsAsjQuery(e) {\n      function i() {\n        r.push(this);\n      }\n\n      var s,\n          n,\n          o,\n          a,\n          r = [],\n          h = [],\n          l = this._connectWith();\n\n      if (l && e) for (s = l.length - 1; s >= 0; s--) {\n        for (o = t(l[s], this.document[0]), n = o.length - 1; n >= 0; n--) {\n          a = t.data(o[n], this.widgetFullName), a && a !== this && !a.options.disabled && h.push([t.isFunction(a.options.items) ? a.options.items.call(a.element) : t(a.options.items, a.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), a]);\n        }\n      }\n\n      for (h.push([t.isFunction(this.options.items) ? this.options.items.call(this.element, null, {\n        options: this.options,\n        item: this.currentItem\n      }) : t(this.options.items, this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), this]), s = h.length - 1; s >= 0; s--) {\n        h[s][0].each(i);\n      }\n\n      return t(r);\n    },\n    _removeCurrentsFromItems: function _removeCurrentsFromItems() {\n      var e = this.currentItem.find(\":data(\" + this.widgetName + \"-item)\");\n      this.items = t.grep(this.items, function (t) {\n        for (var i = 0; e.length > i; i++) {\n          if (e[i] === t.item[0]) return !1;\n        }\n\n        return !0;\n      });\n    },\n    _refreshItems: function _refreshItems(e) {\n      this.items = [], this.containers = [this];\n\n      var i,\n          s,\n          n,\n          o,\n          a,\n          r,\n          h,\n          l,\n          c = this.items,\n          u = [[t.isFunction(this.options.items) ? this.options.items.call(this.element[0], e, {\n        item: this.currentItem\n      }) : t(this.options.items, this.element), this]],\n          d = this._connectWith();\n\n      if (d && this.ready) for (i = d.length - 1; i >= 0; i--) {\n        for (n = t(d[i], this.document[0]), s = n.length - 1; s >= 0; s--) {\n          o = t.data(n[s], this.widgetFullName), o && o !== this && !o.options.disabled && (u.push([t.isFunction(o.options.items) ? o.options.items.call(o.element[0], e, {\n            item: this.currentItem\n          }) : t(o.options.items, o.element), o]), this.containers.push(o));\n        }\n      }\n\n      for (i = u.length - 1; i >= 0; i--) {\n        for (a = u[i][1], r = u[i][0], s = 0, l = r.length; l > s; s++) {\n          h = t(r[s]), h.data(this.widgetName + \"-item\", a), c.push({\n            item: h,\n            instance: a,\n            width: 0,\n            height: 0,\n            left: 0,\n            top: 0\n          });\n        }\n      }\n    },\n    refreshPositions: function refreshPositions(e) {\n      this.floating = this.items.length ? \"x\" === this.options.axis || this._isFloating(this.items[0].item) : !1, this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());\n      var i, s, n, o;\n\n      for (i = this.items.length - 1; i >= 0; i--) {\n        s = this.items[i], s.instance !== this.currentContainer && this.currentContainer && s.item[0] !== this.currentItem[0] || (n = this.options.toleranceElement ? t(this.options.toleranceElement, s.item) : s.item, e || (s.width = n.outerWidth(), s.height = n.outerHeight()), o = n.offset(), s.left = o.left, s.top = o.top);\n      }\n\n      if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);else for (i = this.containers.length - 1; i >= 0; i--) {\n        o = this.containers[i].element.offset(), this.containers[i].containerCache.left = o.left, this.containers[i].containerCache.top = o.top, this.containers[i].containerCache.width = this.containers[i].element.outerWidth(), this.containers[i].containerCache.height = this.containers[i].element.outerHeight();\n      }\n      return this;\n    },\n    _createPlaceholder: function _createPlaceholder(e) {\n      e = e || this;\n      var i,\n          s = e.options;\n      s.placeholder && s.placeholder.constructor !== String || (i = s.placeholder, s.placeholder = {\n        element: function element() {\n          var s = e.currentItem[0].nodeName.toLowerCase(),\n              n = t(\"<\" + s + \">\", e.document[0]);\n          return e._addClass(n, \"ui-sortable-placeholder\", i || e.currentItem[0].className)._removeClass(n, \"ui-sortable-helper\"), \"tbody\" === s ? e._createTrPlaceholder(e.currentItem.find(\"tr\").eq(0), t(\"<tr>\", e.document[0]).appendTo(n)) : \"tr\" === s ? e._createTrPlaceholder(e.currentItem, n) : \"img\" === s && n.attr(\"src\", e.currentItem.attr(\"src\")), i || n.css(\"visibility\", \"hidden\"), n;\n        },\n        update: function update(t, n) {\n          (!i || s.forcePlaceholderSize) && (n.height() || n.height(e.currentItem.innerHeight() - parseInt(e.currentItem.css(\"paddingTop\") || 0, 10) - parseInt(e.currentItem.css(\"paddingBottom\") || 0, 10)), n.width() || n.width(e.currentItem.innerWidth() - parseInt(e.currentItem.css(\"paddingLeft\") || 0, 10) - parseInt(e.currentItem.css(\"paddingRight\") || 0, 10)));\n        }\n      }), e.placeholder = t(s.placeholder.element.call(e.element, e.currentItem)), e.currentItem.after(e.placeholder), s.placeholder.update(e, e.placeholder);\n    },\n    _createTrPlaceholder: function _createTrPlaceholder(e, i) {\n      var s = this;\n      e.children().each(function () {\n        t(\"<td>&#160;</td>\", s.document[0]).attr(\"colspan\", t(this).attr(\"colspan\") || 1).appendTo(i);\n      });\n    },\n    _contactContainers: function _contactContainers(e) {\n      var i,\n          s,\n          n,\n          o,\n          a,\n          r,\n          h,\n          l,\n          c,\n          u,\n          d = null,\n          p = null;\n\n      for (i = this.containers.length - 1; i >= 0; i--) {\n        if (!t.contains(this.currentItem[0], this.containers[i].element[0])) if (this._intersectsWith(this.containers[i].containerCache)) {\n          if (d && t.contains(this.containers[i].element[0], d.element[0])) continue;\n          d = this.containers[i], p = i;\n        } else this.containers[i].containerCache.over && (this.containers[i]._trigger(\"out\", e, this._uiHash(this)), this.containers[i].containerCache.over = 0);\n      }\n\n      if (d) if (1 === this.containers.length) this.containers[p].containerCache.over || (this.containers[p]._trigger(\"over\", e, this._uiHash(this)), this.containers[p].containerCache.over = 1);else {\n        for (n = 1e4, o = null, c = d.floating || this._isFloating(this.currentItem), a = c ? \"left\" : \"top\", r = c ? \"width\" : \"height\", u = c ? \"pageX\" : \"pageY\", s = this.items.length - 1; s >= 0; s--) {\n          t.contains(this.containers[p].element[0], this.items[s].item[0]) && this.items[s].item[0] !== this.currentItem[0] && (h = this.items[s].item.offset()[a], l = !1, e[u] - h > this.items[s][r] / 2 && (l = !0), n > Math.abs(e[u] - h) && (n = Math.abs(e[u] - h), o = this.items[s], this.direction = l ? \"up\" : \"down\"));\n        }\n\n        if (!o && !this.options.dropOnEmpty) return;\n        if (this.currentContainer === this.containers[p]) return this.currentContainer.containerCache.over || (this.containers[p]._trigger(\"over\", e, this._uiHash()), this.currentContainer.containerCache.over = 1), void 0;\n        o ? this._rearrange(e, o, null, !0) : this._rearrange(e, null, this.containers[p].element, !0), this._trigger(\"change\", e, this._uiHash()), this.containers[p]._trigger(\"change\", e, this._uiHash(this)), this.currentContainer = this.containers[p], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[p]._trigger(\"over\", e, this._uiHash(this)), this.containers[p].containerCache.over = 1;\n      }\n    },\n    _createHelper: function _createHelper(e) {\n      var i = this.options,\n          s = t.isFunction(i.helper) ? t(i.helper.apply(this.element[0], [e, this.currentItem])) : \"clone\" === i.helper ? this.currentItem.clone() : this.currentItem;\n      return s.parents(\"body\").length || t(\"parent\" !== i.appendTo ? i.appendTo : this.currentItem[0].parentNode)[0].appendChild(s[0]), s[0] === this.currentItem[0] && (this._storedCSS = {\n        width: this.currentItem[0].style.width,\n        height: this.currentItem[0].style.height,\n        position: this.currentItem.css(\"position\"),\n        top: this.currentItem.css(\"top\"),\n        left: this.currentItem.css(\"left\")\n      }), (!s[0].style.width || i.forceHelperSize) && s.width(this.currentItem.width()), (!s[0].style.height || i.forceHelperSize) && s.height(this.currentItem.height()), s;\n    },\n    _adjustOffsetFromHelper: function _adjustOffsetFromHelper(e) {\n      \"string\" == typeof e && (e = e.split(\" \")), t.isArray(e) && (e = {\n        left: +e[0],\n        top: +e[1] || 0\n      }), \"left\" in e && (this.offset.click.left = e.left + this.margins.left), \"right\" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), \"top\" in e && (this.offset.click.top = e.top + this.margins.top), \"bottom\" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top);\n    },\n    _getParentOffset: function _getParentOffset() {\n      this.offsetParent = this.helper.offsetParent();\n      var e = this.offsetParent.offset();\n      return \"absolute\" === this.cssPosition && this.scrollParent[0] !== this.document[0] && t.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === this.document[0].body || this.offsetParent[0].tagName && \"html\" === this.offsetParent[0].tagName.toLowerCase() && t.ui.ie) && (e = {\n        top: 0,\n        left: 0\n      }), {\n        top: e.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"), 10) || 0),\n        left: e.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"), 10) || 0)\n      };\n    },\n    _getRelativeOffset: function _getRelativeOffset() {\n      if (\"relative\" === this.cssPosition) {\n        var t = this.currentItem.position();\n        return {\n          top: t.top - (parseInt(this.helper.css(\"top\"), 10) || 0) + this.scrollParent.scrollTop(),\n          left: t.left - (parseInt(this.helper.css(\"left\"), 10) || 0) + this.scrollParent.scrollLeft()\n        };\n      }\n\n      return {\n        top: 0,\n        left: 0\n      };\n    },\n    _cacheMargins: function _cacheMargins() {\n      this.margins = {\n        left: parseInt(this.currentItem.css(\"marginLeft\"), 10) || 0,\n        top: parseInt(this.currentItem.css(\"marginTop\"), 10) || 0\n      };\n    },\n    _cacheHelperProportions: function _cacheHelperProportions() {\n      this.helperProportions = {\n        width: this.helper.outerWidth(),\n        height: this.helper.outerHeight()\n      };\n    },\n    _setContainment: function _setContainment() {\n      var e,\n          i,\n          s,\n          n = this.options;\n      \"parent\" === n.containment && (n.containment = this.helper[0].parentNode), (\"document\" === n.containment || \"window\" === n.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, \"document\" === n.containment ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left, (\"document\" === n.containment ? this.document.height() || document.body.parentNode.scrollHeight : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(n.containment) || (e = t(n.containment)[0], i = t(n.containment).offset(), s = \"hidden\" !== t(e).css(\"overflow\"), this.containment = [i.left + (parseInt(t(e).css(\"borderLeftWidth\"), 10) || 0) + (parseInt(t(e).css(\"paddingLeft\"), 10) || 0) - this.margins.left, i.top + (parseInt(t(e).css(\"borderTopWidth\"), 10) || 0) + (parseInt(t(e).css(\"paddingTop\"), 10) || 0) - this.margins.top, i.left + (s ? Math.max(e.scrollWidth, e.offsetWidth) : e.offsetWidth) - (parseInt(t(e).css(\"borderLeftWidth\"), 10) || 0) - (parseInt(t(e).css(\"paddingRight\"), 10) || 0) - this.helperProportions.width - this.margins.left, i.top + (s ? Math.max(e.scrollHeight, e.offsetHeight) : e.offsetHeight) - (parseInt(t(e).css(\"borderTopWidth\"), 10) || 0) - (parseInt(t(e).css(\"paddingBottom\"), 10) || 0) - this.helperProportions.height - this.margins.top]);\n    },\n    _convertPositionTo: function _convertPositionTo(e, i) {\n      i || (i = this.position);\n      var s = \"absolute\" === e ? 1 : -1,\n          n = \"absolute\" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,\n          o = /(html|body)/i.test(n[0].tagName);\n      return {\n        top: i.top + this.offset.relative.top * s + this.offset.parent.top * s - (\"fixed\" === this.cssPosition ? -this.scrollParent.scrollTop() : o ? 0 : n.scrollTop()) * s,\n        left: i.left + this.offset.relative.left * s + this.offset.parent.left * s - (\"fixed\" === this.cssPosition ? -this.scrollParent.scrollLeft() : o ? 0 : n.scrollLeft()) * s\n      };\n    },\n    _generatePosition: function _generatePosition(e) {\n      var i,\n          s,\n          n = this.options,\n          o = e.pageX,\n          a = e.pageY,\n          r = \"absolute\" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,\n          h = /(html|body)/i.test(r[0].tagName);\n      return \"relative\" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (e.pageX - this.offset.click.left < this.containment[0] && (o = this.containment[0] + this.offset.click.left), e.pageY - this.offset.click.top < this.containment[1] && (a = this.containment[1] + this.offset.click.top), e.pageX - this.offset.click.left > this.containment[2] && (o = this.containment[2] + this.offset.click.left), e.pageY - this.offset.click.top > this.containment[3] && (a = this.containment[3] + this.offset.click.top)), n.grid && (i = this.originalPageY + Math.round((a - this.originalPageY) / n.grid[1]) * n.grid[1], a = this.containment ? i - this.offset.click.top >= this.containment[1] && i - this.offset.click.top <= this.containment[3] ? i : i - this.offset.click.top >= this.containment[1] ? i - n.grid[1] : i + n.grid[1] : i, s = this.originalPageX + Math.round((o - this.originalPageX) / n.grid[0]) * n.grid[0], o = this.containment ? s - this.offset.click.left >= this.containment[0] && s - this.offset.click.left <= this.containment[2] ? s : s - this.offset.click.left >= this.containment[0] ? s - n.grid[0] : s + n.grid[0] : s)), {\n        top: a - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + (\"fixed\" === this.cssPosition ? -this.scrollParent.scrollTop() : h ? 0 : r.scrollTop()),\n        left: o - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (\"fixed\" === this.cssPosition ? -this.scrollParent.scrollLeft() : h ? 0 : r.scrollLeft())\n      };\n    },\n    _rearrange: function _rearrange(t, e, i, s) {\n      i ? i[0].appendChild(this.placeholder[0]) : e.item[0].parentNode.insertBefore(this.placeholder[0], \"down\" === this.direction ? e.item[0] : e.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;\n      var n = this.counter;\n\n      this._delay(function () {\n        n === this.counter && this.refreshPositions(!s);\n      });\n    },\n    _clear: function _clear(t, e) {\n      function i(t, e, i) {\n        return function (s) {\n          i._trigger(t, s, e._uiHash(e));\n        };\n      }\n\n      this.reverting = !1;\n      var s,\n          n = [];\n\n      if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {\n        for (s in this._storedCSS) {\n          (\"auto\" === this._storedCSS[s] || \"static\" === this._storedCSS[s]) && (this._storedCSS[s] = \"\");\n        }\n\n        this.currentItem.css(this._storedCSS), this._removeClass(this.currentItem, \"ui-sortable-helper\");\n      } else this.currentItem.show();\n\n      for (this.fromOutside && !e && n.push(function (t) {\n        this._trigger(\"receive\", t, this._uiHash(this.fromOutside));\n      }), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(\".ui-sortable-helper\")[0] && this.domPosition.parent === this.currentItem.parent()[0] || e || n.push(function (t) {\n        this._trigger(\"update\", t, this._uiHash());\n      }), this !== this.currentContainer && (e || (n.push(function (t) {\n        this._trigger(\"remove\", t, this._uiHash());\n      }), n.push(function (t) {\n        return function (e) {\n          t._trigger(\"receive\", e, this._uiHash(this));\n        };\n      }.call(this, this.currentContainer)), n.push(function (t) {\n        return function (e) {\n          t._trigger(\"update\", e, this._uiHash(this));\n        };\n      }.call(this, this.currentContainer)))), s = this.containers.length - 1; s >= 0; s--) {\n        e || n.push(i(\"deactivate\", this, this.containers[s])), this.containers[s].containerCache.over && (n.push(i(\"out\", this, this.containers[s])), this.containers[s].containerCache.over = 0);\n      }\n\n      if (this.storedCursor && (this.document.find(\"body\").css(\"cursor\", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css(\"opacity\", this._storedOpacity), this._storedZIndex && this.helper.css(\"zIndex\", \"auto\" === this._storedZIndex ? \"\" : this._storedZIndex), this.dragging = !1, e || this._trigger(\"beforeStop\", t, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.cancelHelperRemoval || (this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null), !e) {\n        for (s = 0; n.length > s; s++) {\n          n[s].call(this, t);\n        }\n\n        this._trigger(\"stop\", t, this._uiHash());\n      }\n\n      return this.fromOutside = !1, !this.cancelHelperRemoval;\n    },\n    _trigger: function _trigger() {\n      t.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel();\n    },\n    _uiHash: function _uiHash(e) {\n      var i = e || this;\n      return {\n        helper: i.helper,\n        placeholder: i.placeholder || t([]),\n        position: i.position,\n        originalPosition: i.originalPosition,\n        offset: i.positionAbs,\n        item: i.currentItem,\n        sender: e ? e.element : null\n      };\n    }\n  }), t.widget(\"ui.menu\", {\n    version: \"1.12.1\",\n    defaultElement: \"<ul>\",\n    delay: 300,\n    options: {\n      icons: {\n        submenu: \"ui-icon-caret-1-e\"\n      },\n      items: \"> *\",\n      menus: \"ul\",\n      position: {\n        my: \"left top\",\n        at: \"right top\"\n      },\n      role: \"menu\",\n      blur: null,\n      focus: null,\n      select: null\n    },\n    _create: function _create() {\n      this.activeMenu = this.element, this.mouseHandled = !1, this.element.uniqueId().attr({\n        role: this.options.role,\n        tabIndex: 0\n      }), this._addClass(\"ui-menu\", \"ui-widget ui-widget-content\"), this._on({\n        \"mousedown .ui-menu-item\": function mousedownUiMenuItem(t) {\n          t.preventDefault();\n        },\n        \"click .ui-menu-item\": function clickUiMenuItem(e) {\n          var i = t(e.target),\n              s = t(t.ui.safeActiveElement(this.document[0]));\n          !this.mouseHandled && i.not(\".ui-state-disabled\").length && (this.select(e), e.isPropagationStopped() || (this.mouseHandled = !0), i.has(\".ui-menu\").length ? this.expand(e) : !this.element.is(\":focus\") && s.closest(\".ui-menu\").length && (this.element.trigger(\"focus\", [!0]), this.active && 1 === this.active.parents(\".ui-menu\").length && clearTimeout(this.timer)));\n        },\n        \"mouseenter .ui-menu-item\": function mouseenterUiMenuItem(e) {\n          if (!this.previousFilter) {\n            var i = t(e.target).closest(\".ui-menu-item\"),\n                s = t(e.currentTarget);\n            i[0] === s[0] && (this._removeClass(s.siblings().children(\".ui-state-active\"), null, \"ui-state-active\"), this.focus(e, s));\n          }\n        },\n        mouseleave: \"collapseAll\",\n        \"mouseleave .ui-menu\": \"collapseAll\",\n        focus: function focus(t, e) {\n          var i = this.active || this.element.find(this.options.items).eq(0);\n          e || this.focus(t, i);\n        },\n        blur: function blur(e) {\n          this._delay(function () {\n            var i = !t.contains(this.element[0], t.ui.safeActiveElement(this.document[0]));\n            i && this.collapseAll(e);\n          });\n        },\n        keydown: \"_keydown\"\n      }), this.refresh(), this._on(this.document, {\n        click: function click(t) {\n          this._closeOnDocumentClick(t) && this.collapseAll(t), this.mouseHandled = !1;\n        }\n      });\n    },\n    _destroy: function _destroy() {\n      var e = this.element.find(\".ui-menu-item\").removeAttr(\"role aria-disabled\"),\n          i = e.children(\".ui-menu-item-wrapper\").removeUniqueId().removeAttr(\"tabIndex role aria-haspopup\");\n      this.element.removeAttr(\"aria-activedescendant\").find(\".ui-menu\").addBack().removeAttr(\"role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex\").removeUniqueId().show(), i.children().each(function () {\n        var e = t(this);\n        e.data(\"ui-menu-submenu-caret\") && e.remove();\n      });\n    },\n    _keydown: function _keydown(e) {\n      var i,\n          s,\n          n,\n          o,\n          a = !0;\n\n      switch (e.keyCode) {\n        case t.ui.keyCode.PAGE_UP:\n          this.previousPage(e);\n          break;\n\n        case t.ui.keyCode.PAGE_DOWN:\n          this.nextPage(e);\n          break;\n\n        case t.ui.keyCode.HOME:\n          this._move(\"first\", \"first\", e);\n\n          break;\n\n        case t.ui.keyCode.END:\n          this._move(\"last\", \"last\", e);\n\n          break;\n\n        case t.ui.keyCode.UP:\n          this.previous(e);\n          break;\n\n        case t.ui.keyCode.DOWN:\n          this.next(e);\n          break;\n\n        case t.ui.keyCode.LEFT:\n          this.collapse(e);\n          break;\n\n        case t.ui.keyCode.RIGHT:\n          this.active && !this.active.is(\".ui-state-disabled\") && this.expand(e);\n          break;\n\n        case t.ui.keyCode.ENTER:\n        case t.ui.keyCode.SPACE:\n          this._activate(e);\n\n          break;\n\n        case t.ui.keyCode.ESCAPE:\n          this.collapse(e);\n          break;\n\n        default:\n          a = !1, s = this.previousFilter || \"\", o = !1, n = e.keyCode >= 96 && 105 >= e.keyCode ? \"\" + (e.keyCode - 96) : String.fromCharCode(e.keyCode), clearTimeout(this.filterTimer), n === s ? o = !0 : n = s + n, i = this._filterMenuItems(n), i = o && -1 !== i.index(this.active.next()) ? this.active.nextAll(\".ui-menu-item\") : i, i.length || (n = String.fromCharCode(e.keyCode), i = this._filterMenuItems(n)), i.length ? (this.focus(e, i), this.previousFilter = n, this.filterTimer = this._delay(function () {\n            delete this.previousFilter;\n          }, 1e3)) : delete this.previousFilter;\n      }\n\n      a && e.preventDefault();\n    },\n    _activate: function _activate(t) {\n      this.active && !this.active.is(\".ui-state-disabled\") && (this.active.children(\"[aria-haspopup='true']\").length ? this.expand(t) : this.select(t));\n    },\n    refresh: function refresh() {\n      var e,\n          i,\n          s,\n          n,\n          o,\n          a = this,\n          r = this.options.icons.submenu,\n          h = this.element.find(this.options.menus);\n      this._toggleClass(\"ui-menu-icons\", null, !!this.element.find(\".ui-icon\").length), s = h.filter(\":not(.ui-menu)\").hide().attr({\n        role: this.options.role,\n        \"aria-hidden\": \"true\",\n        \"aria-expanded\": \"false\"\n      }).each(function () {\n        var e = t(this),\n            i = e.prev(),\n            s = t(\"<span>\").data(\"ui-menu-submenu-caret\", !0);\n        a._addClass(s, \"ui-menu-icon\", \"ui-icon \" + r), i.attr(\"aria-haspopup\", \"true\").prepend(s), e.attr(\"aria-labelledby\", i.attr(\"id\"));\n      }), this._addClass(s, \"ui-menu\", \"ui-widget ui-widget-content ui-front\"), e = h.add(this.element), i = e.find(this.options.items), i.not(\".ui-menu-item\").each(function () {\n        var e = t(this);\n        a._isDivider(e) && a._addClass(e, \"ui-menu-divider\", \"ui-widget-content\");\n      }), n = i.not(\".ui-menu-item, .ui-menu-divider\"), o = n.children().not(\".ui-menu\").uniqueId().attr({\n        tabIndex: -1,\n        role: this._itemRole()\n      }), this._addClass(n, \"ui-menu-item\")._addClass(o, \"ui-menu-item-wrapper\"), i.filter(\".ui-state-disabled\").attr(\"aria-disabled\", \"true\"), this.active && !t.contains(this.element[0], this.active[0]) && this.blur();\n    },\n    _itemRole: function _itemRole() {\n      return {\n        menu: \"menuitem\",\n        listbox: \"option\"\n      }[this.options.role];\n    },\n    _setOption: function _setOption(t, e) {\n      if (\"icons\" === t) {\n        var i = this.element.find(\".ui-menu-icon\");\n\n        this._removeClass(i, null, this.options.icons.submenu)._addClass(i, null, e.submenu);\n      }\n\n      this._super(t, e);\n    },\n    _setOptionDisabled: function _setOptionDisabled(t) {\n      this._super(t), this.element.attr(\"aria-disabled\", t + \"\"), this._toggleClass(null, \"ui-state-disabled\", !!t);\n    },\n    focus: function focus(t, e) {\n      var i, s, n;\n      this.blur(t, t && \"focus\" === t.type), this._scrollIntoView(e), this.active = e.first(), s = this.active.children(\".ui-menu-item-wrapper\"), this._addClass(s, null, \"ui-state-active\"), this.options.role && this.element.attr(\"aria-activedescendant\", s.attr(\"id\")), n = this.active.parent().closest(\".ui-menu-item\").children(\".ui-menu-item-wrapper\"), this._addClass(n, null, \"ui-state-active\"), t && \"keydown\" === t.type ? this._close() : this.timer = this._delay(function () {\n        this._close();\n      }, this.delay), i = e.children(\".ui-menu\"), i.length && t && /^mouse/.test(t.type) && this._startOpening(i), this.activeMenu = e.parent(), this._trigger(\"focus\", t, {\n        item: e\n      });\n    },\n    _scrollIntoView: function _scrollIntoView(e) {\n      var i, s, n, o, a, r;\n      this._hasScroll() && (i = parseFloat(t.css(this.activeMenu[0], \"borderTopWidth\")) || 0, s = parseFloat(t.css(this.activeMenu[0], \"paddingTop\")) || 0, n = e.offset().top - this.activeMenu.offset().top - i - s, o = this.activeMenu.scrollTop(), a = this.activeMenu.height(), r = e.outerHeight(), 0 > n ? this.activeMenu.scrollTop(o + n) : n + r > a && this.activeMenu.scrollTop(o + n - a + r));\n    },\n    blur: function blur(t, e) {\n      e || clearTimeout(this.timer), this.active && (this._removeClass(this.active.children(\".ui-menu-item-wrapper\"), null, \"ui-state-active\"), this._trigger(\"blur\", t, {\n        item: this.active\n      }), this.active = null);\n    },\n    _startOpening: function _startOpening(t) {\n      clearTimeout(this.timer), \"true\" === t.attr(\"aria-hidden\") && (this.timer = this._delay(function () {\n        this._close(), this._open(t);\n      }, this.delay));\n    },\n    _open: function _open(e) {\n      var i = t.extend({\n        of: this.active\n      }, this.options.position);\n      clearTimeout(this.timer), this.element.find(\".ui-menu\").not(e.parents(\".ui-menu\")).hide().attr(\"aria-hidden\", \"true\"), e.show().removeAttr(\"aria-hidden\").attr(\"aria-expanded\", \"true\").position(i);\n    },\n    collapseAll: function collapseAll(e, i) {\n      clearTimeout(this.timer), this.timer = this._delay(function () {\n        var s = i ? this.element : t(e && e.target).closest(this.element.find(\".ui-menu\"));\n        s.length || (s = this.element), this._close(s), this.blur(e), this._removeClass(s.find(\".ui-state-active\"), null, \"ui-state-active\"), this.activeMenu = s;\n      }, this.delay);\n    },\n    _close: function _close(t) {\n      t || (t = this.active ? this.active.parent() : this.element), t.find(\".ui-menu\").hide().attr(\"aria-hidden\", \"true\").attr(\"aria-expanded\", \"false\");\n    },\n    _closeOnDocumentClick: function _closeOnDocumentClick(e) {\n      return !t(e.target).closest(\".ui-menu\").length;\n    },\n    _isDivider: function _isDivider(t) {\n      return !/[^\\-\\u2014\\u2013\\s]/.test(t.text());\n    },\n    collapse: function collapse(t) {\n      var e = this.active && this.active.parent().closest(\".ui-menu-item\", this.element);\n      e && e.length && (this._close(), this.focus(t, e));\n    },\n    expand: function expand(t) {\n      var e = this.active && this.active.children(\".ui-menu \").find(this.options.items).first();\n      e && e.length && (this._open(e.parent()), this._delay(function () {\n        this.focus(t, e);\n      }));\n    },\n    next: function next(t) {\n      this._move(\"next\", \"first\", t);\n    },\n    previous: function previous(t) {\n      this._move(\"prev\", \"last\", t);\n    },\n    isFirstItem: function isFirstItem() {\n      return this.active && !this.active.prevAll(\".ui-menu-item\").length;\n    },\n    isLastItem: function isLastItem() {\n      return this.active && !this.active.nextAll(\".ui-menu-item\").length;\n    },\n    _move: function _move(t, e, i) {\n      var s;\n      this.active && (s = \"first\" === t || \"last\" === t ? this.active[\"first\" === t ? \"prevAll\" : \"nextAll\"](\".ui-menu-item\").eq(-1) : this.active[t + \"All\"](\".ui-menu-item\").eq(0)), s && s.length && this.active || (s = this.activeMenu.find(this.options.items)[e]()), this.focus(i, s);\n    },\n    nextPage: function nextPage(e) {\n      var i, s, n;\n      return this.active ? (this.isLastItem() || (this._hasScroll() ? (s = this.active.offset().top, n = this.element.height(), this.active.nextAll(\".ui-menu-item\").each(function () {\n        return i = t(this), 0 > i.offset().top - s - n;\n      }), this.focus(e, i)) : this.focus(e, this.activeMenu.find(this.options.items)[this.active ? \"last\" : \"first\"]())), void 0) : (this.next(e), void 0);\n    },\n    previousPage: function previousPage(e) {\n      var i, s, n;\n      return this.active ? (this.isFirstItem() || (this._hasScroll() ? (s = this.active.offset().top, n = this.element.height(), this.active.prevAll(\".ui-menu-item\").each(function () {\n        return i = t(this), i.offset().top - s + n > 0;\n      }), this.focus(e, i)) : this.focus(e, this.activeMenu.find(this.options.items).first())), void 0) : (this.next(e), void 0);\n    },\n    _hasScroll: function _hasScroll() {\n      return this.element.outerHeight() < this.element.prop(\"scrollHeight\");\n    },\n    select: function select(e) {\n      this.active = this.active || t(e.target).closest(\".ui-menu-item\");\n      var i = {\n        item: this.active\n      };\n      this.active.has(\".ui-menu\").length || this.collapseAll(e, !0), this._trigger(\"select\", e, i);\n    },\n    _filterMenuItems: function _filterMenuItems(e) {\n      var i = e.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\"),\n          s = RegExp(\"^\" + i, \"i\");\n      return this.activeMenu.find(this.options.items).filter(\".ui-menu-item\").filter(function () {\n        return s.test(t.trim(t(this).children(\".ui-menu-item-wrapper\").text()));\n      });\n    }\n  }), t.widget(\"ui.autocomplete\", {\n    version: \"1.12.1\",\n    defaultElement: \"<input>\",\n    options: {\n      appendTo: null,\n      autoFocus: !1,\n      delay: 300,\n      minLength: 1,\n      position: {\n        my: \"left top\",\n        at: \"left bottom\",\n        collision: \"none\"\n      },\n      source: null,\n      change: null,\n      close: null,\n      focus: null,\n      open: null,\n      response: null,\n      search: null,\n      select: null\n    },\n    requestIndex: 0,\n    pending: 0,\n    _create: function _create() {\n      var e,\n          i,\n          s,\n          n = this.element[0].nodeName.toLowerCase(),\n          o = \"textarea\" === n,\n          a = \"input\" === n;\n      this.isMultiLine = o || !a && this._isContentEditable(this.element), this.valueMethod = this.element[o || a ? \"val\" : \"text\"], this.isNewMenu = !0, this._addClass(\"ui-autocomplete-input\"), this.element.attr(\"autocomplete\", \"off\"), this._on(this.element, {\n        keydown: function keydown(n) {\n          if (this.element.prop(\"readOnly\")) return e = !0, s = !0, i = !0, void 0;\n          e = !1, s = !1, i = !1;\n          var o = t.ui.keyCode;\n\n          switch (n.keyCode) {\n            case o.PAGE_UP:\n              e = !0, this._move(\"previousPage\", n);\n              break;\n\n            case o.PAGE_DOWN:\n              e = !0, this._move(\"nextPage\", n);\n              break;\n\n            case o.UP:\n              e = !0, this._keyEvent(\"previous\", n);\n              break;\n\n            case o.DOWN:\n              e = !0, this._keyEvent(\"next\", n);\n              break;\n\n            case o.ENTER:\n              this.menu.active && (e = !0, n.preventDefault(), this.menu.select(n));\n              break;\n\n            case o.TAB:\n              this.menu.active && this.menu.select(n);\n              break;\n\n            case o.ESCAPE:\n              this.menu.element.is(\":visible\") && (this.isMultiLine || this._value(this.term), this.close(n), n.preventDefault());\n              break;\n\n            default:\n              i = !0, this._searchTimeout(n);\n          }\n        },\n        keypress: function keypress(s) {\n          if (e) return e = !1, (!this.isMultiLine || this.menu.element.is(\":visible\")) && s.preventDefault(), void 0;\n\n          if (!i) {\n            var n = t.ui.keyCode;\n\n            switch (s.keyCode) {\n              case n.PAGE_UP:\n                this._move(\"previousPage\", s);\n\n                break;\n\n              case n.PAGE_DOWN:\n                this._move(\"nextPage\", s);\n\n                break;\n\n              case n.UP:\n                this._keyEvent(\"previous\", s);\n\n                break;\n\n              case n.DOWN:\n                this._keyEvent(\"next\", s);\n\n            }\n          }\n        },\n        input: function input(t) {\n          return s ? (s = !1, t.preventDefault(), void 0) : (this._searchTimeout(t), void 0);\n        },\n        focus: function focus() {\n          this.selectedItem = null, this.previous = this._value();\n        },\n        blur: function blur(t) {\n          return this.cancelBlur ? (delete this.cancelBlur, void 0) : (clearTimeout(this.searching), this.close(t), this._change(t), void 0);\n        }\n      }), this._initSource(), this.menu = t(\"<ul>\").appendTo(this._appendTo()).menu({\n        role: null\n      }).hide().menu(\"instance\"), this._addClass(this.menu.element, \"ui-autocomplete\", \"ui-front\"), this._on(this.menu.element, {\n        mousedown: function mousedown(e) {\n          e.preventDefault(), this.cancelBlur = !0, this._delay(function () {\n            delete this.cancelBlur, this.element[0] !== t.ui.safeActiveElement(this.document[0]) && this.element.trigger(\"focus\");\n          });\n        },\n        menufocus: function menufocus(e, i) {\n          var s, n;\n          return this.isNewMenu && (this.isNewMenu = !1, e.originalEvent && /^mouse/.test(e.originalEvent.type)) ? (this.menu.blur(), this.document.one(\"mousemove\", function () {\n            t(e.target).trigger(e.originalEvent);\n          }), void 0) : (n = i.item.data(\"ui-autocomplete-item\"), !1 !== this._trigger(\"focus\", e, {\n            item: n\n          }) && e.originalEvent && /^key/.test(e.originalEvent.type) && this._value(n.value), s = i.item.attr(\"aria-label\") || n.value, s && t.trim(s).length && (this.liveRegion.children().hide(), t(\"<div>\").text(s).appendTo(this.liveRegion)), void 0);\n        },\n        menuselect: function menuselect(e, i) {\n          var s = i.item.data(\"ui-autocomplete-item\"),\n              n = this.previous;\n          this.element[0] !== t.ui.safeActiveElement(this.document[0]) && (this.element.trigger(\"focus\"), this.previous = n, this._delay(function () {\n            this.previous = n, this.selectedItem = s;\n          })), !1 !== this._trigger(\"select\", e, {\n            item: s\n          }) && this._value(s.value), this.term = this._value(), this.close(e), this.selectedItem = s;\n        }\n      }), this.liveRegion = t(\"<div>\", {\n        role: \"status\",\n        \"aria-live\": \"assertive\",\n        \"aria-relevant\": \"additions\"\n      }).appendTo(this.document[0].body), this._addClass(this.liveRegion, null, \"ui-helper-hidden-accessible\"), this._on(this.window, {\n        beforeunload: function beforeunload() {\n          this.element.removeAttr(\"autocomplete\");\n        }\n      });\n    },\n    _destroy: function _destroy() {\n      clearTimeout(this.searching), this.element.removeAttr(\"autocomplete\"), this.menu.element.remove(), this.liveRegion.remove();\n    },\n    _setOption: function _setOption(t, e) {\n      this._super(t, e), \"source\" === t && this._initSource(), \"appendTo\" === t && this.menu.element.appendTo(this._appendTo()), \"disabled\" === t && e && this.xhr && this.xhr.abort();\n    },\n    _isEventTargetInWidget: function _isEventTargetInWidget(e) {\n      var i = this.menu.element[0];\n      return e.target === this.element[0] || e.target === i || t.contains(i, e.target);\n    },\n    _closeOnClickOutside: function _closeOnClickOutside(t) {\n      this._isEventTargetInWidget(t) || this.close();\n    },\n    _appendTo: function _appendTo() {\n      var e = this.options.appendTo;\n      return e && (e = e.jquery || e.nodeType ? t(e) : this.document.find(e).eq(0)), e && e[0] || (e = this.element.closest(\".ui-front, dialog\")), e.length || (e = this.document[0].body), e;\n    },\n    _initSource: function _initSource() {\n      var e,\n          i,\n          s = this;\n      t.isArray(this.options.source) ? (e = this.options.source, this.source = function (i, s) {\n        s(t.ui.autocomplete.filter(e, i.term));\n      }) : \"string\" == typeof this.options.source ? (i = this.options.source, this.source = function (e, n) {\n        s.xhr && s.xhr.abort(), s.xhr = t.ajax({\n          url: i,\n          data: e,\n          dataType: \"json\",\n          success: function success(t) {\n            n(t);\n          },\n          error: function error() {\n            n([]);\n          }\n        });\n      }) : this.source = this.options.source;\n    },\n    _searchTimeout: function _searchTimeout(t) {\n      clearTimeout(this.searching), this.searching = this._delay(function () {\n        var e = this.term === this._value(),\n            i = this.menu.element.is(\":visible\"),\n            s = t.altKey || t.ctrlKey || t.metaKey || t.shiftKey;\n\n        (!e || e && !i && !s) && (this.selectedItem = null, this.search(null, t));\n      }, this.options.delay);\n    },\n    search: function search(t, e) {\n      return t = null != t ? t : this._value(), this.term = this._value(), t.length < this.options.minLength ? this.close(e) : this._trigger(\"search\", e) !== !1 ? this._search(t) : void 0;\n    },\n    _search: function _search(t) {\n      this.pending++, this._addClass(\"ui-autocomplete-loading\"), this.cancelSearch = !1, this.source({\n        term: t\n      }, this._response());\n    },\n    _response: function _response() {\n      var e = ++this.requestIndex;\n      return t.proxy(function (t) {\n        e === this.requestIndex && this.__response(t), this.pending--, this.pending || this._removeClass(\"ui-autocomplete-loading\");\n      }, this);\n    },\n    __response: function __response(t) {\n      t && (t = this._normalize(t)), this._trigger(\"response\", null, {\n        content: t\n      }), !this.options.disabled && t && t.length && !this.cancelSearch ? (this._suggest(t), this._trigger(\"open\")) : this._close();\n    },\n    close: function close(t) {\n      this.cancelSearch = !0, this._close(t);\n    },\n    _close: function _close(t) {\n      this._off(this.document, \"mousedown\"), this.menu.element.is(\":visible\") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger(\"close\", t));\n    },\n    _change: function _change(t) {\n      this.previous !== this._value() && this._trigger(\"change\", t, {\n        item: this.selectedItem\n      });\n    },\n    _normalize: function _normalize(e) {\n      return e.length && e[0].label && e[0].value ? e : t.map(e, function (e) {\n        return \"string\" == typeof e ? {\n          label: e,\n          value: e\n        } : t.extend({}, e, {\n          label: e.label || e.value,\n          value: e.value || e.label\n        });\n      });\n    },\n    _suggest: function _suggest(e) {\n      var i = this.menu.element.empty();\n      this._renderMenu(i, e), this.isNewMenu = !0, this.menu.refresh(), i.show(), this._resizeMenu(), i.position(t.extend({\n        of: this.element\n      }, this.options.position)), this.options.autoFocus && this.menu.next(), this._on(this.document, {\n        mousedown: \"_closeOnClickOutside\"\n      });\n    },\n    _resizeMenu: function _resizeMenu() {\n      var t = this.menu.element;\n      t.outerWidth(Math.max(t.width(\"\").outerWidth() + 1, this.element.outerWidth()));\n    },\n    _renderMenu: function _renderMenu(e, i) {\n      var s = this;\n      t.each(i, function (t, i) {\n        s._renderItemData(e, i);\n      });\n    },\n    _renderItemData: function _renderItemData(t, e) {\n      return this._renderItem(t, e).data(\"ui-autocomplete-item\", e);\n    },\n    _renderItem: function _renderItem(e, i) {\n      return t(\"<li>\").append(t(\"<div>\").text(i.label)).appendTo(e);\n    },\n    _move: function _move(t, e) {\n      return this.menu.element.is(\":visible\") ? this.menu.isFirstItem() && /^previous/.test(t) || this.menu.isLastItem() && /^next/.test(t) ? (this.isMultiLine || this._value(this.term), this.menu.blur(), void 0) : (this.menu[t](e), void 0) : (this.search(null, e), void 0);\n    },\n    widget: function widget() {\n      return this.menu.element;\n    },\n    _value: function _value() {\n      return this.valueMethod.apply(this.element, arguments);\n    },\n    _keyEvent: function _keyEvent(t, e) {\n      (!this.isMultiLine || this.menu.element.is(\":visible\")) && (this._move(t, e), e.preventDefault());\n    },\n    _isContentEditable: function _isContentEditable(t) {\n      if (!t.length) return !1;\n      var e = t.prop(\"contentEditable\");\n      return \"inherit\" === e ? this._isContentEditable(t.parent()) : \"true\" === e;\n    }\n  }), t.extend(t.ui.autocomplete, {\n    escapeRegex: function escapeRegex(t) {\n      return t.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n    },\n    filter: function filter(e, i) {\n      var s = RegExp(t.ui.autocomplete.escapeRegex(i), \"i\");\n      return t.grep(e, function (t) {\n        return s.test(t.label || t.value || t);\n      });\n    }\n  }), t.widget(\"ui.autocomplete\", t.ui.autocomplete, {\n    options: {\n      messages: {\n        noResults: \"No search results.\",\n        results: function results(t) {\n          return t + (t > 1 ? \" results are\" : \" result is\") + \" available, use up and down arrow keys to navigate.\";\n        }\n      }\n    },\n    __response: function __response(e) {\n      var i;\n      this._superApply(arguments), this.options.disabled || this.cancelSearch || (i = e && e.length ? this.options.messages.results(e.length) : this.options.messages.noResults, this.liveRegion.children().hide(), t(\"<div>\").text(i).appendTo(this.liveRegion));\n    }\n  }), t.ui.autocomplete;\n});\n\n//# sourceURL=webpack://domino/./src/scripts/vendors/jquery-ui.min.js?");

/***/ }),

/***/ "./src/scripts/vendors/json2.js":
/*!**************************************!*\
  !*** ./src/scripts/vendors/json2.js ***!
  \**************************************/
/***/ (() => {

eval("function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n//  json2.js\n//  2016-05-01\n//  Public Domain.\n//  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n//  See http://www.JSON.org/js.html\n//  This code should be minified before deployment.\n//  See http://javascript.crockford.com/jsmin.html\n//  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n//  NOT CONTROL.\n//  This file creates a global JSON object containing two methods: stringify\n//  and parse. This file is provides the ES5 JSON capability to ES3 systems.\n//  If a project might run on IE8 or earlier, then this file should be included.\n//  This file does nothing on ES5 systems.\n//      JSON.stringify(value, replacer, space)\n//          value       any JavaScript value, usually an object or array.\n//          replacer    an optional parameter that determines how object\n//                      values are stringified for objects. It can be a\n//                      function or an array of strings.\n//          space       an optional parameter that specifies the indentation\n//                      of nested structures. If it is omitted, the text will\n//                      be packed without extra whitespace. If it is a number,\n//                      it will specify the number of spaces to indent at each\n//                      level. If it is a string (such as \"\\t\" or \"&nbsp;\"),\n//                      it contains the characters used to indent at each level.\n//          This method produces a JSON text from a JavaScript value.\n//          When an object value is found, if the object contains a toJSON\n//          method, its toJSON method will be called and the result will be\n//          stringified. A toJSON method does not serialize: it returns the\n//          value represented by the name/value pair that should be serialized,\n//          or undefined if nothing should be serialized. The toJSON method\n//          will be passed the key associated with the value, and this will be\n//          bound to the value.\n//          For example, this would serialize Dates as ISO strings.\n//              Date.prototype.toJSON = function (key) {\n//                  function f(n) {\n//                      // Format integers to have at least two digits.\n//                      return (n < 10)\n//                          ? \"0\" + n\n//                          : n;\n//                  }\n//                  return this.getUTCFullYear()   + \"-\" +\n//                       f(this.getUTCMonth() + 1) + \"-\" +\n//                       f(this.getUTCDate())      + \"T\" +\n//                       f(this.getUTCHours())     + \":\" +\n//                       f(this.getUTCMinutes())   + \":\" +\n//                       f(this.getUTCSeconds())   + \"Z\";\n//              };\n//          You can provide an optional replacer method. It will be passed the\n//          key and value of each member, with this bound to the containing\n//          object. The value that is returned from your method will be\n//          serialized. If your method returns undefined, then the member will\n//          be excluded from the serialization.\n//          If the replacer parameter is an array of strings, then it will be\n//          used to select the members to be serialized. It filters the results\n//          such that only members with keys listed in the replacer array are\n//          stringified.\n//          Values that do not have JSON representations, such as undefined or\n//          functions, will not be serialized. Such values in objects will be\n//          dropped; in arrays they will be replaced with null. You can use\n//          a replacer function to replace those with JSON values.\n//          JSON.stringify(undefined) returns undefined.\n//          The optional space parameter produces a stringification of the\n//          value that is filled with line breaks and indentation to make it\n//          easier to read.\n//          If the space parameter is a non-empty string, then that string will\n//          be used for indentation. If the space parameter is a number, then\n//          the indentation will be that many spaces.\n//          Example:\n//          text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n//          // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n//          text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n//          // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n//          text = JSON.stringify([new Date()], function (key, value) {\n//              return this[key] instanceof Date\n//                  ? \"Date(\" + this[key] + \")\"\n//                  : value;\n//          });\n//          // text is '[\"Date(---current time---)\"]'\n//      JSON.parse(text, reviver)\n//          This method parses a JSON text to produce an object or array.\n//          It can throw a SyntaxError exception.\n//          The optional reviver parameter is a function that can filter and\n//          transform the results. It receives each of the keys and values,\n//          and its return value is used instead of the original value.\n//          If it returns what it received, then the structure is not modified.\n//          If it returns undefined then the member is deleted.\n//          Example:\n//          // Parse the text. Values that look like ISO date strings will\n//          // be converted to Date objects.\n//          myData = JSON.parse(text, function (key, value) {\n//              var a;\n//              if (typeof value === \"string\") {\n//                  a =\n//   /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n//                  if (a) {\n//                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n//                          +a[5], +a[6]));\n//                  }\n//              }\n//              return value;\n//          });\n//          myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n//              var d;\n//              if (typeof value === \"string\" &&\n//                      value.slice(0, 5) === \"Date(\" &&\n//                      value.slice(-1) === \")\") {\n//                  d = new Date(value.slice(5, -1));\n//                  if (d) {\n//                      return d;\n//                  }\n//              }\n//              return value;\n//          });\n//  This is a reference implementation. You are free to copy, modify, or\n//  redistribute.\n\n/*jslint\r\n    eval, for, this\r\n*/\n\n/*property\r\n    JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\r\n    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\r\n    lastIndex, length, parse, prototype, push, replace, slice, stringify,\r\n    test, toJSON, toString, valueOf\r\n*/\n// Create a JSON object only if one does not already exist. We create the\n// methods in a closure to avoid creating global variables.\nif ((typeof JSON === \"undefined\" ? \"undefined\" : _typeof(JSON)) !== \"object\") {\n  JSON = {};\n}\n\n(function () {\n  \"use strict\";\n\n  var rx_one = /^[\\],:{}\\s]*$/;\n  var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n  var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n  var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n  var rx_escapable = /[\\\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n  var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n  function f(n) {\n    // Format integers to have at least two digits.\n    return n < 10 ? \"0\" + n : n;\n  }\n\n  function this_value() {\n    return this.valueOf();\n  }\n\n  if (typeof Date.prototype.toJSON !== \"function\") {\n    Date.prototype.toJSON = function () {\n      return isFinite(this.valueOf()) ? this.getUTCFullYear() + \"-\" + f(this.getUTCMonth() + 1) + \"-\" + f(this.getUTCDate()) + \"T\" + f(this.getUTCHours()) + \":\" + f(this.getUTCMinutes()) + \":\" + f(this.getUTCSeconds()) + \"Z\" : null;\n    };\n\n    Boolean.prototype.toJSON = this_value;\n    Number.prototype.toJSON = this_value;\n    String.prototype.toJSON = this_value;\n  }\n\n  var gap;\n  var indent;\n  var meta;\n  var rep;\n\n  function quote(string) {\n    // If the string contains no control characters, no quote characters, and no\n    // backslash characters, then we can safely slap some quotes around it.\n    // Otherwise we must also replace the offending characters with safe escape\n    // sequences.\n    rx_escapable.lastIndex = 0;\n    return rx_escapable.test(string) ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n      var c = meta[a];\n      return typeof c === \"string\" ? c : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n    }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\n  }\n\n  function str(key, holder) {\n    // Produce a string from holder[key].\n    var i; // The loop counter.\n\n    var k; // The member key.\n\n    var v; // The member value.\n\n    var length;\n    var mind = gap;\n    var partial;\n    var value = holder[key]; // If the value has a toJSON method, call it to obtain a replacement value.\n\n    if (value && _typeof(value) === \"object\" && typeof value.toJSON === \"function\") {\n      value = value.toJSON(key);\n    } // If we were called with a replacer function, then call the replacer to\n    // obtain a replacement value.\n\n\n    if (typeof rep === \"function\") {\n      value = rep.call(holder, key, value);\n    } // What happens next depends on the value's type.\n\n\n    switch (_typeof(value)) {\n      case \"string\":\n        return quote(value);\n\n      case \"number\":\n        // JSON numbers must be finite. Encode non-finite numbers as null.\n        return isFinite(value) ? String(value) : \"null\";\n\n      case \"boolean\":\n      case \"null\":\n        // If the value is a boolean or null, convert it to a string. Note:\n        // typeof null does not produce \"null\". The case is included here in\n        // the remote chance that this gets fixed someday.\n        return String(value);\n      // If the type is \"object\", we might be dealing with an object or an array or\n      // null.\n\n      case \"object\":\n        // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n        // so watch out for that case.\n        if (!value) {\n          return \"null\";\n        } // Make an array to hold the partial results of stringifying this object value.\n\n\n        gap += indent;\n        partial = []; // Is the value an array?\n\n        if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n          // The value is an array. Stringify every element. Use null as a placeholder\n          // for non-JSON values.\n          length = value.length;\n\n          for (i = 0; i < length; i += 1) {\n            partial[i] = str(i, value) || \"null\";\n          } // Join all of the elements together, separated with commas, and wrap them in\n          // brackets.\n\n\n          v = partial.length === 0 ? \"[]\" : gap ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" : \"[\" + partial.join(\",\") + \"]\";\n          gap = mind;\n          return v;\n        } // If the replacer is an array, use it to select the members to be stringified.\n\n\n        if (rep && _typeof(rep) === \"object\") {\n          length = rep.length;\n\n          for (i = 0; i < length; i += 1) {\n            if (typeof rep[i] === \"string\") {\n              k = rep[i];\n              v = str(k, value);\n\n              if (v) {\n                partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n              }\n            }\n          }\n        } else {\n          // Otherwise, iterate through all of the keys in the object.\n          for (k in value) {\n            if (Object.prototype.hasOwnProperty.call(value, k)) {\n              v = str(k, value);\n\n              if (v) {\n                partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n              }\n            }\n          }\n        } // Join all of the member texts together, separated with commas,\n        // and wrap them in braces.\n\n\n        v = partial.length === 0 ? \"{}\" : gap ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" : \"{\" + partial.join(\",\") + \"}\";\n        gap = mind;\n        return v;\n    }\n  } // If the JSON object does not yet have a stringify method, give it one.\n\n\n  if (typeof JSON.stringify !== \"function\") {\n    meta = {\n      // table of character substitutions\n      \"\\b\": \"\\\\b\",\n      \"\\t\": \"\\\\t\",\n      \"\\n\": \"\\\\n\",\n      \"\\f\": \"\\\\f\",\n      \"\\r\": \"\\\\r\",\n      \"\\\"\": \"\\\\\\\"\",\n      \"\\\\\": \"\\\\\\\\\"\n    };\n\n    JSON.stringify = function (value, replacer, space) {\n      // The stringify method takes a value and an optional replacer, and an optional\n      // space parameter, and returns a JSON text. The replacer can be a function\n      // that can replace values, or an array of strings that will select the keys.\n      // A default replacer method can be provided. Use of the space parameter can\n      // produce text that is more easily readable.\n      var i;\n      gap = \"\";\n      indent = \"\"; // If the space parameter is a number, make an indent string containing that\n      // many spaces.\n\n      if (typeof space === \"number\") {\n        for (i = 0; i < space; i += 1) {\n          indent += \" \";\n        } // If the space parameter is a string, it will be used as the indent string.\n\n      } else if (typeof space === \"string\") {\n        indent = space;\n      } // If there is a replacer, it must be a function or an array.\n      // Otherwise, throw an error.\n\n\n      rep = replacer;\n\n      if (replacer && typeof replacer !== \"function\" && (_typeof(replacer) !== \"object\" || typeof replacer.length !== \"number\")) {\n        throw new Error(\"JSON.stringify\");\n      } // Make a fake root object containing our value under the key of \"\".\n      // Return the result of stringifying the value.\n\n\n      return str(\"\", {\n        \"\": value\n      });\n    };\n  } // If the JSON object does not yet have a parse method, give it one.\n\n\n  if (typeof JSON.parse !== \"function\") {\n    JSON.parse = function (text, reviver) {\n      // The parse method takes a text and an optional reviver function, and returns\n      // a JavaScript value if the text is a valid JSON text.\n      var j;\n\n      function walk(holder, key) {\n        // The walk method is used to recursively walk the resulting structure so\n        // that modifications can be made.\n        var k;\n        var v;\n        var value = holder[key];\n\n        if (value && _typeof(value) === \"object\") {\n          for (k in value) {\n            if (Object.prototype.hasOwnProperty.call(value, k)) {\n              v = walk(value, k);\n\n              if (v !== undefined) {\n                value[k] = v;\n              } else {\n                delete value[k];\n              }\n            }\n          }\n        }\n\n        return reviver.call(holder, key, value);\n      } // Parsing happens in four stages. In the first stage, we replace certain\n      // Unicode characters with escape sequences. JavaScript handles many characters\n      // incorrectly, either silently deleting them, or treating them as line endings.\n\n\n      text = String(text);\n      rx_dangerous.lastIndex = 0;\n\n      if (rx_dangerous.test(text)) {\n        text = text.replace(rx_dangerous, function (a) {\n          return \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n        });\n      } // In the second stage, we run the text against regular expressions that look\n      // for non-JSON patterns. We are especially concerned with \"()\" and \"new\"\n      // because they can cause invocation, and \"=\" because it can cause mutation.\n      // But just to be safe, we want to reject all unexpected forms.\n      // We split the second stage into 4 regexp operations in order to work around\n      // crippling inefficiencies in IE's and Safari's regexp engines. First we\n      // replace the JSON backslash pairs with \"@\" (a non-JSON character). Second, we\n      // replace all simple value tokens with \"]\" characters. Third, we delete all\n      // open brackets that follow a colon or comma or that begin the text. Finally,\n      // we look to see that the remaining characters are only whitespace or \"]\" or\n      // \",\" or \":\" or \"{\" or \"}\". If that is so, then the text is safe for eval.\n\n\n      if (rx_one.test(text.replace(rx_two, \"@\").replace(rx_three, \"]\").replace(rx_four, \"\"))) {\n        // In the third stage we use the eval function to compile the text into a\n        // JavaScript structure. The \"{\" operator is subject to a syntactic ambiguity\n        // in JavaScript: it can begin a block or an object literal. We wrap the text\n        // in parens to eliminate the ambiguity.\n        j = eval(\"(\" + text + \")\"); // In the optional fourth stage, we recursively walk the new structure, passing\n        // each name/value pair to a reviver function for possible transformation.\n\n        return typeof reviver === \"function\" ? walk({\n          \"\": j\n        }, \"\") : j;\n      } // If the text is not JSON parseable, then a SyntaxError is thrown.\n\n\n      throw new SyntaxError(\"JSON.parse\");\n    };\n  }\n})();\n\n//# sourceURL=webpack://domino/./src/scripts/vendors/json2.js?");

/***/ }),

/***/ "./src/scripts/vendors/knockout.validation.fa-IR.js":
/*!**********************************************************!*\
  !*** ./src/scripts/vendors/knockout.validation.fa-IR.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("/* provided dependency */ var ko = __webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\");\n__webpack_require__(/*! knockout.validation */ \"./node_modules/knockout.validation/dist/knockout.validation.js\");\n/**\r\n * Localization file for Farsi - Iran (fa-IR)\r\n */\n\n\n(function (factory) {\n  factory(ko.validation);\n})(function (kv) {\n  if (!kv || typeof kv.defineLocale !== 'function') {\n    throw new Error('Knockout-Validation is required, please ensure it is loaded before this localization file');\n  }\n\n  return kv.defineLocale('fa-IR', {\n    required: 'تکمیل این فیلد اجباری است.',\n    min: 'لطفاً مقداری بزرگتر یا برابر {0} وارد نمائید.',\n    max: 'لطفاً مقداری کوچکتر یا برابر {0} وارد نمائید.',\n    minLength: 'لطفاً حداقل {0} حرف وارد نمائید.',\n    maxLength: 'لطفاً حداکثر {0} حرف وارد نمائید.',\n    pattern: 'لطفاً یک مقدار معتبر وارد نمائید.',\n    step: 'مقدار باید با {0} افزایش پبدا کند.',\n    email: 'لطفاً یک آدرس ایمیل معتبر وارد نمائید.',\n    date: 'لطفاً یک تاریخ معتبر وارد نمائید.',\n    dateISO: 'لطفاً یک تاریخ معتبر وارد نمائید.',\n    number: 'لطفاً یک عدد وارد نمائید.',\n    digit: 'لطفاً یک عدد وارد نمائید.',\n    phoneUS: 'لطفاً یک شماره تماس معتبر وارد نمائید.',\n    equal: 'مقدارها باید برابر باشند.',\n    notEqual: 'لطفاً یک مقدار دیگر وارد نمائید.',\n    unique: 'لطفاً یک مقدار منحصربه فرد وارد نمائید.'\n  });\n});\n\n//# sourceURL=webpack://domino/./src/scripts/vendors/knockout.validation.fa-IR.js?");

/***/ }),

/***/ "./src/scripts/vendors/toastr.js":
/*!***************************************!*\
  !*** ./src/scripts/vendors/toastr.js ***!
  \***************************************/
/***/ ((module, exports, __webpack_require__) => {

eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\r\n * Toastr\r\n * Copyright 2012-2015\r\n * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.\r\n * All Rights Reserved.\r\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\r\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\r\n *\r\n * ARIA Support: Greta Krafsig\r\n *\r\n * Project: https://github.com/CodeSeven/toastr\r\n */\n\n/* global define */\n;\n\n(function (define) {\n  !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function ($) {\n    return function () {\n      var $container;\n      var listener;\n      var toastId = 0;\n      var toastType = {\n        error: 'error',\n        info: 'info',\n        success: 'success',\n        warning: 'warning'\n      };\n      var toastr = {\n        clear: clear,\n        remove: remove,\n        error: error,\n        getContainer: getContainer,\n        info: info,\n        options: {},\n        subscribe: subscribe,\n        success: success,\n        version: '2.1.1',\n        warning: warning\n      };\n      var previousToast;\n      return toastr; ////////////////\n\n      function error(message, title, optionsOverride) {\n        return notify({\n          type: toastType.error,\n          iconClass: getOptions().iconClasses.error,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function getContainer(options, create) {\n        if (!options) {\n          options = getOptions();\n        }\n\n        $container = $('#' + options.containerId);\n\n        if ($container.length) {\n          return $container;\n        }\n\n        if (create) {\n          $container = createContainer(options);\n        }\n\n        return $container;\n      }\n\n      function info(message, title, optionsOverride) {\n        return notify({\n          type: toastType.info,\n          iconClass: getOptions().iconClasses.info,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function subscribe(callback) {\n        listener = callback;\n      }\n\n      function success(message, title, optionsOverride) {\n        return notify({\n          type: toastType.success,\n          iconClass: getOptions().iconClasses.success,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function warning(message, title, optionsOverride) {\n        return notify({\n          type: toastType.warning,\n          iconClass: getOptions().iconClasses.warning,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function clear($toastElement, clearOptions) {\n        var options = getOptions();\n\n        if (!$container) {\n          getContainer(options);\n        }\n\n        if (!clearToast($toastElement, options, clearOptions)) {\n          clearContainer(options);\n        }\n      }\n\n      function remove($toastElement) {\n        var options = getOptions();\n\n        if (!$container) {\n          getContainer(options);\n        }\n\n        if ($toastElement && $(':focus', $toastElement).length === 0) {\n          removeToast($toastElement);\n          return;\n        }\n\n        if ($container.children().length) {\n          $container.remove();\n        }\n      } // internal functions\n\n\n      function clearContainer(options) {\n        var toastsToClear = $container.children();\n\n        for (var i = toastsToClear.length - 1; i >= 0; i--) {\n          clearToast($(toastsToClear[i]), options);\n        }\n      }\n\n      function clearToast($toastElement, options, clearOptions) {\n        var force = clearOptions && clearOptions.force ? clearOptions.force : false;\n\n        if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {\n          $toastElement[options.hideMethod]({\n            duration: options.hideDuration,\n            easing: options.hideEasing,\n            complete: function complete() {\n              removeToast($toastElement);\n            }\n          });\n          return true;\n        }\n\n        return false;\n      }\n\n      function createContainer(options) {\n        $container = $('<div/>').attr('id', options.containerId).addClass(options.positionClass).attr('aria-live', 'polite').attr('role', 'alert');\n        $container.appendTo($(options.target));\n        return $container;\n      }\n\n      function getDefaults() {\n        return {\n          tapToDismiss: true,\n          toastClass: 'toast',\n          containerId: 'toast-container',\n          debug: false,\n          showMethod: 'fadeIn',\n          //fadeIn, slideDown, and show are built into jQuery\n          showDuration: 300,\n          showEasing: 'swing',\n          //swing and linear are built into jQuery\n          onShown: undefined,\n          hideMethod: 'fadeOut',\n          hideDuration: 1000,\n          hideEasing: 'swing',\n          onHidden: undefined,\n          extendedTimeOut: 1000,\n          iconClasses: {\n            error: 'toast-error',\n            info: 'toast-info',\n            success: 'toast-success',\n            warning: 'toast-warning'\n          },\n          iconClass: 'toast-info',\n          positionClass: 'toast-top-right',\n          timeOut: 5000,\n          // Set timeOut and extendedTimeOut to 0 to make it sticky\n          titleClass: 'toast-title',\n          messageClass: 'toast-message',\n          target: 'body',\n          closeHtml: '<button type=\"button\">&times;</button>',\n          newestOnTop: true,\n          preventDuplicates: false,\n          progressBar: false\n        };\n      }\n\n      function publish(args) {\n        if (!listener) {\n          return;\n        }\n\n        listener(args);\n      }\n\n      function notify(map) {\n        var options = getOptions();\n        var iconClass = map.iconClass || options.iconClass;\n\n        if (typeof map.optionsOverride !== 'undefined') {\n          options = $.extend(options, map.optionsOverride);\n          iconClass = map.optionsOverride.iconClass || iconClass;\n        }\n\n        if (shouldExit(options, map)) {\n          return;\n        }\n\n        toastId++;\n        $container = getContainer(options, true);\n        var intervalId = null;\n        var $toastElement = $('<div/>');\n        var $titleElement = $('<div/>');\n        var $messageElement = $('<div/>');\n        var $progressElement = $('<div/>');\n        var $closeElement = $(options.closeHtml);\n        var progressBar = {\n          intervalId: null,\n          hideEta: null,\n          maxHideTime: null\n        };\n        var response = {\n          toastId: toastId,\n          state: 'visible',\n          startTime: new Date(),\n          options: options,\n          map: map\n        };\n        personalizeToast();\n        displayToast();\n        handleEvents();\n        publish(response);\n\n        if (options.debug && console) {\n          console.log(response);\n        }\n\n        return $toastElement;\n\n        function personalizeToast() {\n          setIcon();\n          setTitle();\n          setMessage();\n          setCloseButton();\n          setProgressBar();\n          setSequence();\n        }\n\n        function handleEvents() {\n          $toastElement.hover(stickAround, delayedHideToast);\n\n          if (!options.onclick && options.tapToDismiss) {\n            $toastElement.click(hideToast);\n          }\n\n          if (options.closeButton && $closeElement) {\n            $closeElement.click(function (event) {\n              if (event.stopPropagation) {\n                event.stopPropagation();\n              } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n                event.cancelBubble = true;\n              }\n\n              hideToast(true);\n            });\n          }\n\n          if (options.onclick) {\n            $toastElement.click(function () {\n              options.onclick();\n              hideToast();\n            });\n          }\n        }\n\n        function displayToast() {\n          $toastElement.hide();\n          $toastElement[options.showMethod]({\n            duration: options.showDuration,\n            easing: options.showEasing,\n            complete: options.onShown\n          });\n\n          if (options.timeOut > 0) {\n            intervalId = setTimeout(hideToast, options.timeOut);\n            progressBar.maxHideTime = parseFloat(options.timeOut);\n            progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n\n            if (options.progressBar) {\n              progressBar.intervalId = setInterval(updateProgress, 10);\n            }\n          }\n        }\n\n        function setIcon() {\n          if (map.iconClass) {\n            $toastElement.addClass(options.toastClass).addClass(iconClass);\n          }\n        }\n\n        function setSequence() {\n          if (options.newestOnTop) {\n            $container.prepend($toastElement);\n          } else {\n            $container.append($toastElement);\n          }\n        }\n\n        function setTitle() {\n          if (map.title) {\n            $titleElement.append(map.title).addClass(options.titleClass);\n            $toastElement.append($titleElement);\n          }\n        }\n\n        function setMessage() {\n          if (map.message) {\n            $messageElement.append(map.message).addClass(options.messageClass);\n            $toastElement.append($messageElement);\n          }\n        }\n\n        function setCloseButton() {\n          if (options.closeButton) {\n            $closeElement.addClass('toast-close-button').attr('role', 'button');\n            $toastElement.prepend($closeElement);\n          }\n        }\n\n        function setProgressBar() {\n          if (options.progressBar) {\n            $progressElement.addClass('toast-progress');\n            $toastElement.prepend($progressElement);\n          }\n        }\n\n        function shouldExit(options, map) {\n          if (options.preventDuplicates) {\n            if (map.message === previousToast) {\n              return true;\n            } else {\n              previousToast = map.message;\n            }\n          }\n\n          return false;\n        }\n\n        function hideToast(override) {\n          if ($(':focus', $toastElement).length && !override) {\n            return;\n          }\n\n          clearTimeout(progressBar.intervalId);\n          return $toastElement[options.hideMethod]({\n            duration: options.hideDuration,\n            easing: options.hideEasing,\n            complete: function complete() {\n              removeToast($toastElement);\n\n              if (options.onHidden && response.state !== 'hidden') {\n                options.onHidden();\n              }\n\n              response.state = 'hidden';\n              response.endTime = new Date();\n              publish(response);\n            }\n          });\n        }\n\n        function delayedHideToast() {\n          if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n            intervalId = setTimeout(hideToast, options.extendedTimeOut);\n            progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n            progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n          }\n        }\n\n        function stickAround() {\n          clearTimeout(intervalId);\n          progressBar.hideEta = 0;\n          $toastElement.stop(true, true)[options.showMethod]({\n            duration: options.showDuration,\n            easing: options.showEasing\n          });\n        }\n\n        function updateProgress() {\n          var percentage = (progressBar.hideEta - new Date().getTime()) / progressBar.maxHideTime * 100;\n          $progressElement.width(percentage + '%');\n        }\n      }\n\n      function getOptions() {\n        return $.extend({}, getDefaults(), toastr.options);\n      }\n\n      function removeToast($toastElement) {\n        if (!$container) {\n          $container = getContainer();\n        }\n\n        if ($toastElement.is(':visible')) {\n          return;\n        }\n\n        $toastElement.remove();\n        $toastElement = null;\n\n        if ($container.children().length === 0) {\n          $container.remove();\n          previousToast = undefined;\n        }\n      }\n    }();\n  }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n})(__webpack_require__.amdD);\n\n//# sourceURL=webpack://domino/./src/scripts/vendors/toastr.js?");

/***/ }),

/***/ "./node_modules/jquery/dist/jquery.js":
/*!********************************************!*\
  !*** ./node_modules/jquery/dist/jquery.js ***!
  \********************************************/
/***/ (function(module, exports) {

eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif (  true && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\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\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\treturn jQuery;\n\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n\n\n//# sourceURL=webpack://domino/./node_modules/jquery/dist/jquery.js?");

/***/ }),

/***/ "./node_modules/knockout.validation/dist/knockout.validation.js":
/*!**********************************************************************!*\
  !*** ./node_modules/knockout.validation/dist/knockout.validation.js ***!
  \**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

eval("/*=============================================================================\n\tAuthor:\t\t\tEric M. Barnard - @ericmbarnard\t\t\t\t\t\t\t\t\n\tLicense:\t\tMIT (http://opensource.org/licenses/mit-license.php)\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\tDescription:\tValidation Library for KnockoutJS\t\t\t\t\t\t\t\n\tVersion:\t\t2.0.3\t\t\t\t\t\t\t\t\t\t\t\n===============================================================================\n*/\n/*globals require: false, exports: false, define: false, ko: false */\n\n(function (factory) {\n\t// Module systems magic dance.\n\n\tif (true) {\n\t\t// CommonJS or Node: hard-coded dependency on \"knockout\"\n\t\tfactory(__webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\"), exports);\n\t} else {}\n}(function ( ko, exports ) {\n\n\tif (typeof (ko) === 'undefined') {\n\t\tthrow new Error('Knockout is required, please ensure it is loaded before loading this validation plug-in');\n\t}\n\n\t// create our namespace object\n\tko.validation = exports;\n\n\tvar kv = ko.validation,\n\t\tkoUtils = ko.utils,\n\t\tunwrap = koUtils.unwrapObservable,\n\t\tforEach = koUtils.arrayForEach,\n\t\textend = koUtils.extend;\n;/*global ko: false*/\n\nvar defaults = {\n\tregisterExtenders: true,\n\tmessagesOnModified: true,\n\terrorsAsTitle: true,            // enables/disables showing of errors as title attribute of the target element.\n\terrorsAsTitleOnModified: false, // shows the error when hovering the input field (decorateElement must be true)\n\tmessageTemplate: null,\n\tinsertMessages: true,           // automatically inserts validation messages as <span></span>\n\tparseInputAttributes: false,    // parses the HTML5 validation attribute from a form element and adds that to the object\n\twriteInputAttributes: false,    // adds HTML5 input validation attributes to form elements that ko observable's are bound to\n\tdecorateInputElement: false,         // false to keep backward compatibility\n\tdecorateElementOnModified: true,// true to keep backward compatibility\n\terrorClass: null,               // single class for error message and element\n\terrorElementClass: 'validationElement',  // class to decorate error element\n\terrorMessageClass: 'validationMessage',  // class to decorate error message\n\tallowHtmlMessages: false,\t\t// allows HTML in validation messages\n\tgrouping: {\n\t\tdeep: false,        //by default grouping is shallow\n\t\tobservable: true,   //and using observables\n\t\tlive: false\t\t    //react to changes to observableArrays if observable === true\n\t},\n\tvalidate: {\n\t\t// throttle: 10\n\t}\n};\n\n// make a copy  so we can use 'reset' later\nvar configuration = extend({}, defaults);\n\nconfiguration.html5Attributes = ['required', 'pattern', 'min', 'max', 'step'];\nconfiguration.html5InputTypes = ['email', 'number', 'date'];\n\nconfiguration.reset = function () {\n\textend(configuration, defaults);\n};\n\nkv.configuration = configuration;\n;kv.utils = (function () {\n\tvar seedId = new Date().getTime();\n\n\tvar domData = {}; //hash of data objects that we reference from dom elements\n\tvar domDataKey = '__ko_validation__';\n\n\treturn {\n\t\tisArray: function (o) {\n\t\t\treturn o.isArray || Object.prototype.toString.call(o) === '[object Array]';\n\t\t},\n\t\tisObject: function (o) {\n\t\t\treturn o !== null && typeof o === 'object';\n\t\t},\n\t\tisNumber: function(o) {\n\t\t\treturn !isNaN(o);\t\n\t\t},\n\t\tisObservableArray: function(instance) {\n\t\t\treturn !!instance &&\n\t\t\t\t\ttypeof instance[\"remove\"] === \"function\" &&\n\t\t\t\t\ttypeof instance[\"removeAll\"] === \"function\" &&\n\t\t\t\t\ttypeof instance[\"destroy\"] === \"function\" &&\n\t\t\t\t\ttypeof instance[\"destroyAll\"] === \"function\" &&\n\t\t\t\t\ttypeof instance[\"indexOf\"] === \"function\" &&\n\t\t\t\t\ttypeof instance[\"replace\"] === \"function\";\n\t\t},\n\t\tvalues: function (o) {\n\t\t\tvar r = [];\n\t\t\tfor (var i in o) {\n\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\tr.push(o[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn r;\n\t\t},\n\t\tgetValue: function (o) {\n\t\t\treturn (typeof o === 'function' ? o() : o);\n\t\t},\n\t\thasAttribute: function (node, attr) {\n\t\t\treturn node.getAttribute(attr) !== null;\n\t\t},\n\t\tgetAttribute: function (element, attr) {\n\t\t\treturn element.getAttribute(attr);\n\t\t},\n\t\tsetAttribute: function (element, attr, value) {\n\t\t\treturn element.setAttribute(attr, value);\n\t\t},\n\t\tisValidatable: function (o) {\n\t\t\treturn !!(o && o.rules && o.isValid && o.isModified);\n\t\t},\n\t\tinsertAfter: function (node, newNode) {\n\t\t\tnode.parentNode.insertBefore(newNode, node.nextSibling);\n\t\t},\n\t\tnewId: function () {\n\t\t\treturn seedId += 1;\n\t\t},\n\t\tgetConfigOptions: function (element) {\n\t\t\tvar options = kv.utils.contextFor(element);\n\n\t\t\treturn options || kv.configuration;\n\t\t},\n\t\tsetDomData: function (node, data) {\n\t\t\tvar key = node[domDataKey];\n\n\t\t\tif (!key) {\n\t\t\t\tnode[domDataKey] = key = kv.utils.newId();\n\t\t\t}\n\n\t\t\tdomData[key] = data;\n\t\t},\n\t\tgetDomData: function (node) {\n\t\t\tvar key = node[domDataKey];\n\n\t\t\tif (!key) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn domData[key];\n\t\t},\n\t\tcontextFor: function (node) {\n\t\t\tswitch (node.nodeType) {\n\t\t\t\tcase 1:\n\t\t\t\tcase 8:\n\t\t\t\t\tvar context = kv.utils.getDomData(node);\n\t\t\t\t\tif (context) { return context; }\n\t\t\t\t\tif (node.parentNode) { return kv.utils.contextFor(node.parentNode); }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tisEmptyVal: function (val) {\n\t\t\tif (val === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (val === null) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (val === \"\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tgetOriginalElementTitle: function (element) {\n\t\t\tvar savedOriginalTitle = kv.utils.getAttribute(element, 'data-orig-title'),\n\t\t\t\tcurrentTitle = element.title,\n\t\t\t\thasSavedOriginalTitle = kv.utils.hasAttribute(element, 'data-orig-title');\n\n\t\t\treturn hasSavedOriginalTitle ?\n\t\t\t\tsavedOriginalTitle : currentTitle;\n\t\t},\n\t\tasync: function (expr) {\n\t\t\tif (window.setImmediate) { window.setImmediate(expr); }\n\t\t\telse { window.setTimeout(expr, 0); }\n\t\t},\n\t\tforEach: function (object, callback) {\n\t\t\tif (kv.utils.isArray(object)) {\n\t\t\t\treturn forEach(object, callback);\n\t\t\t}\n\t\t\tfor (var prop in object) {\n\t\t\t\tif (object.hasOwnProperty(prop)) {\n\t\t\t\t\tcallback(object[prop], prop);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}());;var api = (function () {\n\n\tvar isInitialized = 0,\n\t\tconfiguration = kv.configuration,\n\t\tutils = kv.utils;\n\n\tfunction cleanUpSubscriptions(context) {\n\t\tforEach(context.subscriptions, function (subscription) {\n\t\t\tsubscription.dispose();\n\t\t});\n\t\tcontext.subscriptions = [];\n\t}\n\n\tfunction dispose(context) {\n\t\tif (context.options.deep) {\n\t\t\tforEach(context.flagged, function (obj) {\n\t\t\t\tdelete obj.__kv_traversed;\n\t\t\t});\n\t\t\tcontext.flagged.length = 0;\n\t\t}\n\n\t\tif (!context.options.live) {\n\t\t\tcleanUpSubscriptions(context);\n\t\t}\n\t}\n\n\tfunction runTraversal(obj, context) {\n\t\tcontext.validatables = [];\n\t\tcleanUpSubscriptions(context);\n\t\ttraverseGraph(obj, context);\n\t\tdispose(context);\n\t}\n\n\tfunction traverseGraph(obj, context, level) {\n\t\tvar objValues = [],\n\t\t\tval = obj.peek ? obj.peek() : obj;\n\n\t\tif (obj.__kv_traversed === true) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (context.options.deep) {\n\t\t\tobj.__kv_traversed = true;\n\t\t\tcontext.flagged.push(obj);\n\t\t}\n\n\t\t//default level value depends on deep option.\n\t\tlevel = (level !== undefined ? level : context.options.deep ? 1 : -1);\n\n\t\t// if object is observable then add it to the list\n\t\tif (ko.isObservable(obj)) {\n\t\t\t// ensure it's validatable but don't extend validatedObservable because it\n\t\t\t// would overwrite isValid property.\n\t\t\tif (!obj.errors && !utils.isValidatable(obj)) {\n\t\t\t\tobj.extend({ validatable: true });\n\t\t\t}\n\t\t\tcontext.validatables.push(obj);\n\n\t\t\tif (context.options.live && utils.isObservableArray(obj)) {\n\t\t\t\tcontext.subscriptions.push(obj.subscribe(function () {\n\t\t\t\t\tcontext.graphMonitor.valueHasMutated();\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\n\t\t//get list of values either from array or object but ignore non-objects\n\t\t// and destroyed objects\n\t\tif (val && !val._destroy) {\n\t\t\tif (utils.isArray(val)) {\n\t\t\t\tobjValues = val;\n\t\t\t}\n\t\t\telse if (utils.isObject(val)) {\n\t\t\t\tobjValues = utils.values(val);\n\t\t\t}\n\t\t}\n\n\t\t//process recursively if it is deep grouping\n\t\tif (level !== 0) {\n\t\t\tutils.forEach(objValues, function (observable) {\n\t\t\t\t//but not falsy things and not HTML Elements\n\t\t\t\tif (observable && !observable.nodeType && (!ko.isComputed(observable) || observable.rules)) {\n\t\t\t\t\ttraverseGraph(observable, context, level + 1);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction collectErrors(array) {\n\t\tvar errors = [];\n\t\tforEach(array, function (observable) {\n\t\t\t// Do not collect validatedObservable errors\n\t\t\tif (utils.isValidatable(observable) && !observable.isValid()) {\n\t\t\t\t// Use peek because we don't want a dependency for 'error' property because it\n\t\t\t\t// changes before 'isValid' does. (Issue #99)\n\t\t\t\terrors.push(observable.error.peek());\n\t\t\t}\n\t\t});\n\t\treturn errors;\n\t}\n\n\treturn {\n\t\t//Call this on startup\n\t\t//any config can be overridden with the passed in options\n\t\tinit: function (options, force) {\n\t\t\t//done run this multiple times if we don't really want to\n\t\t\tif (isInitialized > 0 && !force) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//because we will be accessing options properties it has to be an object at least\n\t\t\toptions = options || {};\n\t\t\t//if specific error classes are not provided then apply generic errorClass\n\t\t\t//it has to be done on option so that options.errorClass can override default\n\t\t\t//errorElementClass and errorMessage class but not those provided in options\n\t\t\toptions.errorElementClass = options.errorElementClass || options.errorClass || configuration.errorElementClass;\n\t\t\toptions.errorMessageClass = options.errorMessageClass || options.errorClass || configuration.errorMessageClass;\n\n\t\t\textend(configuration, options);\n\n\t\t\tif (configuration.registerExtenders) {\n\t\t\t\tkv.registerExtenders();\n\t\t\t}\n\n\t\t\tisInitialized = 1;\n\t\t},\n\n\t\t// resets the config back to its original state\n\t\treset: kv.configuration.reset,\n\n\t\t// recursively walks a viewModel and creates an object that\n\t\t// provides validation information for the entire viewModel\n\t\t// obj -> the viewModel to walk\n\t\t// options -> {\n\t\t//\t  deep: false, // if true, will walk past the first level of viewModel properties\n\t\t//\t  observable: false // if true, returns a computed observable indicating if the viewModel is valid\n\t\t// }\n\t\tgroup: function group(obj, options) { // array of observables or viewModel\n\t\t\toptions = extend(extend({}, configuration.grouping), options);\n\n\t\t\tvar context = {\n\t\t\t\toptions: options,\n\t\t\t\tgraphMonitor: ko.observable(),\n\t\t\t\tflagged: [],\n\t\t\t\tsubscriptions: [],\n\t\t\t\tvalidatables: []\n\t\t\t};\n\n\t\t\tvar result = null;\n\n\t\t\t//if using observables then traverse structure once and add observables\n\t\t\tif (options.observable) {\n\t\t\t\tresult = ko.computed(function () {\n\t\t\t\t\tcontext.graphMonitor(); //register dependency\n\t\t\t\t\trunTraversal(obj, context);\n\t\t\t\t\treturn collectErrors(context.validatables);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse { //if not using observables then every call to error() should traverse the structure\n\t\t\t\tresult = function () {\n\t\t\t\t\trunTraversal(obj, context);\n\t\t\t\t\treturn collectErrors(context.validatables);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tresult.showAllMessages = function (show) { // thanks @heliosPortal\n\t\t\t\tif (show === undefined) {//default to true\n\t\t\t\t\tshow = true;\n\t\t\t\t}\n\n\t\t\t\tresult.forEach(function (observable) {\n\t\t\t\t\tif (utils.isValidatable(observable)) {\n\t\t\t\t\t\tobservable.isModified(show);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tresult.isAnyMessageShown = function () {\n\t\t\t\tvar invalidAndModifiedPresent;\n\n\t\t\t\tinvalidAndModifiedPresent = !!result.find(function (observable) {\n\t\t\t\t\treturn utils.isValidatable(observable) && !observable.isValid() && observable.isModified();\n\t\t\t\t});\n\t\t\t\treturn invalidAndModifiedPresent;\n\t\t\t};\n\n\t\t\tresult.filter = function(predicate) {\n\t\t\t\tpredicate = predicate || function () { return true; };\n\t\t\t\t// ensure we have latest changes\n\t\t\t\tresult();\n\n\t\t\t\treturn koUtils.arrayFilter(context.validatables, predicate);\n\t\t\t};\n\n\t\t\tresult.find = function(predicate) {\n\t\t\t\tpredicate = predicate || function () { return true; };\n\t\t\t\t// ensure we have latest changes\n\t\t\t\tresult();\n\n\t\t\t\treturn koUtils.arrayFirst(context.validatables, predicate);\n\t\t\t};\n\n\t\t\tresult.forEach = function(callback) {\n\t\t\t\tcallback = callback || function () { };\n\t\t\t\t// ensure we have latest changes\n\t\t\t\tresult();\n\n\t\t\t\tforEach(context.validatables, callback);\n\t\t\t};\n\n\t\t\tresult.map = function(mapping) {\n\t\t\t\tmapping = mapping || function (item) { return item; };\n\t\t\t\t// ensure we have latest changes\n\t\t\t\tresult();\n\n\t\t\t\treturn koUtils.arrayMap(context.validatables, mapping);\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * @private You should not rely on this method being here.\n\t\t\t * It's a private method and it may change in the future.\n\t\t\t *\n\t\t\t * @description Updates the validated object and collects errors from it.\n\t\t\t */\n\t\t\tresult._updateState = function(newValue) {\n\t\t\t\tif (!utils.isObject(newValue)) {\n\t\t\t\t\tthrow new Error('An object is required.');\n\t\t\t\t}\n\t\t\t\tobj = newValue;\n\t\t\t\tif (options.observable) {\n\t\t\t\t\tcontext.graphMonitor.valueHasMutated();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trunTraversal(newValue, context);\n\t\t\t\t\treturn collectErrors(context.validatables);\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn result;\n\t\t},\n\n\t\tformatMessage: function (message, params, observable) {\n\t\t\tif (utils.isObject(params) && params.typeAttr) {\n\t\t\t\tparams = params.value;\n\t\t\t}\n\t\t\tif (typeof message === 'function') {\n\t\t\t\treturn message(params, observable);\n\t\t\t}\n\t\t\tvar replacements = unwrap(params);\n            if (replacements == null) {\n                replacements = [];\n            }\n\t\t\tif (!utils.isArray(replacements)) {\n\t\t\t\treplacements = [replacements];\n\t\t\t}\n\t\t\treturn message.replace(/{(\\d+)}/gi, function(match, index) {\n\t\t\t\tif (typeof replacements[index] !== 'undefined') {\n\t\t\t\t\treturn replacements[index];\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\t\t},\n\n\t\t// addRule:\n\t\t// This takes in a ko.observable and a Rule Context - which is just a rule name and params to supply to the validator\n\t\t// ie: kv.addRule(myObservable, {\n\t\t//\t\t  rule: 'required',\n\t\t//\t\t  params: true\n\t\t//\t  });\n\t\t//\n\t\taddRule: function (observable, rule) {\n\t\t\tobservable.extend({ validatable: true });\n\n\t\t\tvar hasRule = !!koUtils.arrayFirst(observable.rules(), function(item) {\n\t\t\t\treturn item.rule && item.rule === rule.rule;\n\t\t\t});\n\n\t\t\tif (!hasRule) {\n\t\t\t\t//push a Rule Context to the observables local array of Rule Contexts\n\t\t\t\tobservable.rules.push(rule);\n\t\t\t}\n\t\t\treturn observable;\n\t\t},\n\n\t\t// addAnonymousRule:\n\t\t// Anonymous Rules essentially have all the properties of a Rule, but are only specific for a certain property\n\t\t// and developers typically are wanting to add them on the fly or not register a rule with the 'kv.rules' object\n\t\t//\n\t\t// Example:\n\t\t// var test = ko.observable('something').extend{(\n\t\t//\t  validation: {\n\t\t//\t\t  validator: function(val, someOtherVal){\n\t\t//\t\t\t  return true;\n\t\t//\t\t  },\n\t\t//\t\t  message: \"Something must be really wrong!',\n\t\t//\t\t  params: true\n\t\t//\t  }\n\t\t//  )};\n\t\taddAnonymousRule: function (observable, ruleObj) {\n\t\t\tif (ruleObj['message'] === undefined) {\n\t\t\t\truleObj['message'] = 'Error';\n\t\t\t}\n\n\t\t\t//make sure onlyIf is honoured\n\t\t\tif (ruleObj.onlyIf) {\n\t\t\t\truleObj.condition = ruleObj.onlyIf;\n\t\t\t}\n\n\t\t\t//add the anonymous rule to the observable\n\t\t\tkv.addRule(observable, ruleObj);\n\t\t},\n\n\t\taddExtender: function (ruleName) {\n\t\t\tko.extenders[ruleName] = function (observable, params) {\n\t\t\t\t//params can come in a few flavors\n\t\t\t\t// 1. Just the params to be passed to the validator\n\t\t\t\t// 2. An object containing the Message to be used and the Params to pass to the validator\n\t\t\t\t// 3. A condition when the validation rule to be applied\n\t\t\t\t//\n\t\t\t\t// Example:\n\t\t\t\t// var test = ko.observable(3).extend({\n\t\t\t\t//\t  max: {\n\t\t\t\t//\t\t  message: 'This special field has a Max of {0}',\n\t\t\t\t//\t\t  params: 2,\n\t\t\t\t//\t\t  onlyIf: function() {\n\t\t\t\t//\t\t\t\t\t  return specialField.IsVisible();\n\t\t\t\t//\t\t\t\t  }\n\t\t\t\t//\t  }\n\t\t\t\t//  )};\n\t\t\t\t//\n\t\t\t\tif (params && (params.message || params.onlyIf)) { //if it has a message or condition object, then its an object literal to use\n\t\t\t\t\treturn kv.addRule(observable, {\n\t\t\t\t\t\trule: ruleName,\n\t\t\t\t\t\tmessage: params.message,\n\t\t\t\t\t\tparams: utils.isEmptyVal(params.params) ? true : params.params,\n\t\t\t\t\t\tcondition: params.onlyIf\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn kv.addRule(observable, {\n\t\t\t\t\t\trule: ruleName,\n\t\t\t\t\t\tparams: params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// loops through all kv.rules and adds them as extenders to\n\t\t// ko.extenders\n\t\tregisterExtenders: function () { // root extenders optional, use 'validation' extender if would cause conflicts\n\t\t\tif (configuration.registerExtenders) {\n\t\t\t\tfor (var ruleName in kv.rules) {\n\t\t\t\t\tif (kv.rules.hasOwnProperty(ruleName)) {\n\t\t\t\t\t\tif (!ko.extenders[ruleName]) {\n\t\t\t\t\t\t\tkv.addExtender(ruleName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t//creates a span next to the @element with the specified error class\n\t\tinsertValidationMessage: function (element) {\n\t\t\tvar span = document.createElement('SPAN');\n\t\t\tspan.className = utils.getConfigOptions(element).errorMessageClass;\n\t\t\tutils.insertAfter(element, span);\n\t\t\treturn span;\n\t\t},\n\n\t\t// if html-5 validation attributes have been specified, this parses\n\t\t// the attributes on @element\n\t\tparseInputValidationAttributes: function (element, valueAccessor) {\n\t\t\tforEach(kv.configuration.html5Attributes, function (attr) {\n\t\t\t\tif (utils.hasAttribute(element, attr)) {\n\n\t\t\t\t\tvar params = element.getAttribute(attr) || true;\n\n\t\t\t\t\tif (attr === 'min' || attr === 'max')\n\t\t\t\t\t{\n\t\t\t\t\t\t// If we're validating based on the min and max attributes, we'll\n\t\t\t\t\t\t// need to know what the 'type' attribute is set to\n\t\t\t\t\t\tvar typeAttr = element.getAttribute('type');\n\t\t\t\t\t\tif (typeof typeAttr === \"undefined\" || !typeAttr)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// From http://www.w3.org/TR/html-markup/input:\n\t\t\t\t\t\t\t//   An input element with no type attribute specified represents the\n\t\t\t\t\t\t\t//   same thing as an input element with its type attribute set to \"text\".\n\t\t\t\t\t\t\ttypeAttr = \"text\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparams = {typeAttr: typeAttr, value: params};\n\t\t\t\t\t}\n\n\t\t\t\t\tkv.addRule(valueAccessor(), {\n\t\t\t\t\t\trule: attr,\n\t\t\t\t\t\tparams: params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar currentType = element.getAttribute('type');\n\t\t\tforEach(kv.configuration.html5InputTypes, function (type) {\n\t\t\t\tif (type === currentType) {\n\t\t\t\t\tkv.addRule(valueAccessor(), {\n\t\t\t\t\t\trule: (type === 'date') ? 'dateISO' : type,\n\t\t\t\t\t\tparams: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// writes html5 validation attributes on the element passed in\n\t\twriteInputValidationAttributes: function (element, valueAccessor) {\n\t\t\tvar observable = valueAccessor();\n\n\t\t\tif (!observable || !observable.rules) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar contexts = observable.rules(); // observable array\n\n\t\t\t// loop through the attributes and add the information needed\n\t\t\tforEach(kv.configuration.html5Attributes, function (attr) {\n\t\t\t\tvar ctx = koUtils.arrayFirst(contexts, function (ctx) {\n\t\t\t\t\treturn ctx.rule && ctx.rule.toLowerCase() === attr.toLowerCase();\n\t\t\t\t});\n\n\t\t\t\tif (!ctx) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// we have a rule matching a validation attribute at this point\n\t\t\t\t// so lets add it to the element along with the params\n\t\t\t\tko.computed({\n\t\t\t\t\tread: function() {\n\t\t\t\t\t\tvar params = ko.unwrap(ctx.params);\n\n\t\t\t\t\t\t// we have to do some special things for the pattern validation\n\t\t\t\t\t\tif (ctx.rule === \"pattern\" && params instanceof RegExp) {\n\t\t\t\t\t\t\t// we need the pure string representation of the RegExpr without the //gi stuff\n\t\t\t\t\t\t\tparams = params.source;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telement.setAttribute(attr, params);\n\t\t\t\t\t},\n\t\t\t\t\tdisposeWhenNodeIsRemoved: element\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcontexts = null;\n\t\t},\n\n\t\t//take an existing binding handler and make it cause automatic validations\n\t\tmakeBindingHandlerValidatable: function (handlerName) {\n\t\t\tvar init = ko.bindingHandlers[handlerName].init;\n\n\t\t\tko.bindingHandlers[handlerName].init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n\n\t\t\t\tinit(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);\n\n\t\t\t\treturn ko.bindingHandlers['validationCore'].init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);\n\t\t\t};\n\t\t},\n\n\t\t// visit an objects properties and apply validation rules from a definition\n\t\tsetRules: function (target, definition) {\n\t\t\tvar setRules = function (target, definition) {\n\t\t\t\tif (!target || !definition) { return; }\n\n\t\t\t\tfor (var prop in definition) {\n\t\t\t\t\tif (!definition.hasOwnProperty(prop)) { continue; }\n\t\t\t\t\tvar ruleDefinitions = definition[prop];\n\n\t\t\t\t\t//check the target property exists and has a value\n\t\t\t\t\tif (!target[prop]) { continue; }\n\t\t\t\t\tvar targetValue = target[prop],\n\t\t\t\t\t\tunwrappedTargetValue = unwrap(targetValue),\n\t\t\t\t\t\trules = {},\n\t\t\t\t\t\tnonRules = {};\n\n\t\t\t\t\tfor (var rule in ruleDefinitions) {\n\t\t\t\t\t\tif (!ruleDefinitions.hasOwnProperty(rule)) { continue; }\n\t\t\t\t\t\tif (kv.rules[rule]) {\n\t\t\t\t\t\t\trules[rule] = ruleDefinitions[rule];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnonRules[rule] = ruleDefinitions[rule];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//apply rules\n\t\t\t\t\tif (ko.isObservable(targetValue)) {\n\t\t\t\t\t\ttargetValue.extend(rules);\n\t\t\t\t\t}\n\n\t\t\t\t\t//then apply child rules\n\t\t\t\t\t//if it's an array, apply rules to all children\n\t\t\t\t\tif (unwrappedTargetValue && utils.isArray(unwrappedTargetValue)) {\n\t\t\t\t\t\tfor (var i = 0; i < unwrappedTargetValue.length; i++) {\n\t\t\t\t\t\t\tsetRules(unwrappedTargetValue[i], nonRules);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//otherwise, just apply to this property\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetRules(unwrappedTargetValue, nonRules);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetRules(target, definition);\n\t\t}\n\t};\n\n}());\n\n// expose api publicly\nextend(ko.validation, api);\n;//Validation Rules:\n// You can view and override messages or rules via:\n// kv.rules[ruleName]\n//\n// To implement a custom Rule, simply use this template:\n// kv.rules['<custom rule name>'] = {\n//      validator: function (val, param) {\n//          <custom logic>\n//          return <true or false>;\n//      },\n//      message: '<custom validation message>' //optionally you can also use a '{0}' to denote a placeholder that will be replaced with your 'param'\n// };\n//\n// Example:\n// kv.rules['mustEqual'] = {\n//      validator: function( val, mustEqualVal ){\n//          return val === mustEqualVal;\n//      },\n//      message: 'This field must equal {0}'\n// };\n//\nkv.rules = {};\nkv.rules['required'] = {\n\tvalidator: function (val, required) {\n\t\tvar testVal;\n\n\t\tif (val === undefined || val === null) {\n\t\t\treturn !required;\n\t\t}\n\n\t\ttestVal = val;\n\t\tif (typeof (val) === 'string') {\n\t\t\tif (String.prototype.trim) {\n\t\t\t\ttestVal = val.trim();\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttestVal = val.replace(/^\\s+|\\s+$/g, '');\n\t\t\t}\n\t\t}\n\n\t\tif (!required) {// if they passed: { required: false }, then don't require this\n\t\t\treturn true;\n\t\t}\n\n\t\treturn ((testVal + '').length > 0);\n\t},\n\tmessage: 'This field is required.'\n};\n\nfunction minMaxValidatorFactory(validatorName) {\n    var isMaxValidation = validatorName === \"max\";\n\n    return function (val, options) {\n        if (kv.utils.isEmptyVal(val)) {\n            return true;\n        }\n\n        var comparisonValue, type;\n        if (options.typeAttr === undefined) {\n            // This validator is being called from javascript rather than\n            // being bound from markup\n            type = \"text\";\n            comparisonValue = options;\n        } else {\n            type = options.typeAttr;\n            comparisonValue = options.value;\n        }\n\n        // From http://www.w3.org/TR/2012/WD-html5-20121025/common-input-element-attributes.html#attr-input-min,\n        // if the value is parseable to a number, then the minimum should be numeric\n        if (!isNaN(comparisonValue) && !(comparisonValue instanceof Date)) {\n            type = \"number\";\n        }\n\n        var regex, valMatches, comparisonValueMatches;\n        switch (type.toLowerCase()) {\n            case \"week\":\n                regex = /^(\\d{4})-W(\\d{2})$/;\n                valMatches = val.match(regex);\n                if (valMatches === null) {\n                    throw new Error(\"Invalid value for \" + validatorName + \" attribute for week input.  Should look like \" +\n                        \"'2000-W33' http://www.w3.org/TR/html-markup/input.week.html#input.week.attrs.min\");\n                }\n                comparisonValueMatches = comparisonValue.match(regex);\n                // If no regex matches were found, validation fails\n                if (!comparisonValueMatches) {\n                    return false;\n                }\n\n                if (isMaxValidation) {\n                    return (valMatches[1] < comparisonValueMatches[1]) || // older year\n                        // same year, older week\n                        ((valMatches[1] === comparisonValueMatches[1]) && (valMatches[2] <= comparisonValueMatches[2]));\n                } else {\n                    return (valMatches[1] > comparisonValueMatches[1]) || // newer year\n                        // same year, newer week\n                        ((valMatches[1] === comparisonValueMatches[1]) && (valMatches[2] >= comparisonValueMatches[2]));\n                }\n                break;\n\n            case \"month\":\n                regex = /^(\\d{4})-(\\d{2})$/;\n                valMatches = val.match(regex);\n                if (valMatches === null) {\n                    throw new Error(\"Invalid value for \" + validatorName + \" attribute for month input.  Should look like \" +\n                        \"'2000-03' http://www.w3.org/TR/html-markup/input.month.html#input.month.attrs.min\");\n                }\n                comparisonValueMatches = comparisonValue.match(regex);\n                // If no regex matches were found, validation fails\n                if (!comparisonValueMatches) {\n                    return false;\n                }\n\n                if (isMaxValidation) {\n                    return ((valMatches[1] < comparisonValueMatches[1]) || // older year\n                        // same year, older month\n                        ((valMatches[1] === comparisonValueMatches[1]) && (valMatches[2] <= comparisonValueMatches[2])));\n                } else {\n                    return (valMatches[1] > comparisonValueMatches[1]) || // newer year\n                        // same year, newer month\n                        ((valMatches[1] === comparisonValueMatches[1]) && (valMatches[2] >= comparisonValueMatches[2]));\n                }\n                break;\n\n            case \"number\":\n            case \"range\":\n                if (isMaxValidation) {\n                    return (!isNaN(val) && parseFloat(val) <= parseFloat(comparisonValue));\n                } else {\n                    return (!isNaN(val) && parseFloat(val) >= parseFloat(comparisonValue));\n                }\n                break;\n\n            default:\n                if (isMaxValidation) {\n                    return val <= comparisonValue;\n                } else {\n                    return val >= comparisonValue;\n                }\n        }\n    };\n}\n\nkv.rules['min'] = {\n\tvalidator: minMaxValidatorFactory(\"min\"),\n\tmessage: 'Please enter a value greater than or equal to {0}.'\n};\n\nkv.rules['max'] = {\n\tvalidator: minMaxValidatorFactory(\"max\"),\n\tmessage: 'Please enter a value less than or equal to {0}.'\n};\n\nkv.rules['minLength'] = {\n\tvalidator: function (val, minLength) {\n\t\tif(kv.utils.isEmptyVal(val)) { return true; }\n\t\tvar normalizedVal = kv.utils.isNumber(val) ? ('' + val) : val;\n\t\treturn normalizedVal.length >= minLength;\n\t},\n\tmessage: 'Please enter at least {0} characters.'\n};\n\nkv.rules['maxLength'] = {\n\tvalidator: function (val, maxLength) {\n\t\tif(kv.utils.isEmptyVal(val)) { return true; }\n\t\tvar normalizedVal = kv.utils.isNumber(val) ? ('' + val) : val;\n\t\treturn normalizedVal.length <= maxLength;\n\t},\n\tmessage: 'Please enter no more than {0} characters.'\n};\n\nkv.rules['pattern'] = {\n\tvalidator: function (val, regex) {\n\t\treturn kv.utils.isEmptyVal(val) || val.toString().match(regex) !== null;\n\t},\n\tmessage: 'Please check this value.'\n};\n\nkv.rules['step'] = {\n\tvalidator: function (val, step) {\n\n\t\t// in order to handle steps of .1 & .01 etc.. Modulus won't work\n\t\t// if the value is a decimal, so we have to correct for that\n\t\tif (kv.utils.isEmptyVal(val) || step === 'any') { return true; }\n\t\tvar dif = (val * 100) % (step * 100);\n\t\treturn Math.abs(dif) < 0.00001 || Math.abs(1 - dif) < 0.00001;\n\t},\n\tmessage: 'The value must increment by {0}.'\n};\n\nkv.rules['email'] = {\n\tvalidator: function (val, validate) {\n\t\tif (!validate) { return true; }\n\n\t\t//I think an empty email address is also a valid entry\n\t\t//if one want's to enforce entry it should be done with 'required: true'\n\t\treturn kv.utils.isEmptyVal(val) || (\n\t\t\t// jquery validate regex - thanks Scott Gonzalez\n\t\t\tvalidate && /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(val)\n\t\t);\n\t},\n\tmessage: 'Please enter a proper email address.'\n};\n\nkv.rules['date'] = {\n\tvalidator: function (value, validate) {\n\t\tif (!validate) { return true; }\n\t\treturn kv.utils.isEmptyVal(value) || (validate && !/Invalid|NaN/.test(new Date(value)));\n\t},\n\tmessage: 'Please enter a proper date.'\n};\n\nkv.rules['dateISO'] = {\n\tvalidator: function (value, validate) {\n\t\tif (!validate) { return true; }\n\t\treturn kv.utils.isEmptyVal(value) || (validate && /^\\d{4}[-/](?:0?[1-9]|1[012])[-/](?:0?[1-9]|[12][0-9]|3[01])$/.test(value));\n\t},\n\tmessage: 'Please enter a proper date.'\n};\n\nkv.rules['number'] = {\n\tvalidator: function (value, validate) {\n\t\tif (!validate) { return true; }\n\t\treturn kv.utils.isEmptyVal(value) || (validate && /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value));\n\t},\n\tmessage: 'Please enter a number.'\n};\n\nkv.rules['digit'] = {\n\tvalidator: function (value, validate) {\n\t\tif (!validate) { return true; }\n\t\treturn kv.utils.isEmptyVal(value) || (validate && /^\\d+$/.test(value));\n\t},\n\tmessage: 'Please enter a digit.'\n};\n\nkv.rules['phoneUS'] = {\n\tvalidator: function (phoneNumber, validate) {\n\t\tif (!validate) { return true; }\n\t\tif (kv.utils.isEmptyVal(phoneNumber)) { return true; } // makes it optional, use 'required' rule if it should be required\n\t\tif (typeof (phoneNumber) !== 'string') { return false; }\n\t\tphoneNumber = phoneNumber.replace(/\\s+/g, \"\");\n\t\treturn validate && phoneNumber.length > 9 && phoneNumber.match(/^(1-?)?(\\([2-9]\\d{2}\\)|[2-9]\\d{2})-?[2-9]\\d{2}-?\\d{4}$/);\n\t},\n\tmessage: 'Please specify a valid phone number.'\n};\n\nkv.rules['equal'] = {\n\tvalidator: function (val, params) {\n\t\tvar otherValue = params;\n\t\treturn val === kv.utils.getValue(otherValue);\n\t},\n\tmessage: 'Values must equal.'\n};\n\nkv.rules['notEqual'] = {\n\tvalidator: function (val, params) {\n\t\tvar otherValue = params;\n\t\treturn val !== kv.utils.getValue(otherValue);\n\t},\n\tmessage: 'Please choose another value.'\n};\n\n//unique in collection\n// options are:\n//    collection: array or function returning (observable) array\n//              in which the value has to be unique\n//    valueAccessor: function that returns value from an object stored in collection\n//              if it is null the value is compared directly\n//    external: set to true when object you are validating is automatically updating collection\nkv.rules['unique'] = {\n\tvalidator: function (val, options) {\n\t\tvar c = kv.utils.getValue(options.collection),\n\t\t\texternal = kv.utils.getValue(options.externalValue),\n\t\t\tcounter = 0;\n\n\t\tif (!val || !c) { return true; }\n\n\t\tkoUtils.arrayFilter(c, function (item) {\n\t\t\tif (val === (options.valueAccessor ? options.valueAccessor(item) : item)) { counter++; }\n\t\t});\n\t\t// if value is external even 1 same value in collection means the value is not unique\n\t\treturn counter < (!!external ? 1 : 2);\n\t},\n\tmessage: 'Please make sure the value is unique.'\n};\n\n\n//now register all of these!\n(function () {\n\tkv.registerExtenders();\n}());\n;// The core binding handler\n// this allows us to setup any value binding that internally always\n// performs the same functionality\nko.bindingHandlers['validationCore'] = (function () {\n\n\treturn {\n\t\tinit: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n\t\t\tvar config = kv.utils.getConfigOptions(element);\n\t\t\tvar observable = valueAccessor();\n\n\t\t\t// parse html5 input validation attributes, optional feature\n\t\t\tif (config.parseInputAttributes) {\n\t\t\t\tkv.utils.async(function () { kv.parseInputValidationAttributes(element, valueAccessor); });\n\t\t\t}\n\n\t\t\t// if requested insert message element and apply bindings\n\t\t\tif (config.insertMessages && kv.utils.isValidatable(observable)) {\n\n\t\t\t\t// insert the <span></span>\n\t\t\t\tvar validationMessageElement = kv.insertValidationMessage(element);\n\n\t\t\t\t// if we're told to use a template, make sure that gets rendered\n\t\t\t\tif (config.messageTemplate) {\n\t\t\t\t\tko.renderTemplate(config.messageTemplate, { field: observable }, null, validationMessageElement, 'replaceNode');\n\t\t\t\t} else {\n\t\t\t\t\tko.applyBindingsToNode(validationMessageElement, { validationMessage: observable });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// write the html5 attributes if indicated by the config\n\t\t\tif (config.writeInputAttributes && kv.utils.isValidatable(observable)) {\n\n\t\t\t\tkv.writeInputValidationAttributes(element, valueAccessor);\n\t\t\t}\n\n\t\t\t// if requested, add binding to decorate element\n\t\t\tif (config.decorateInputElement && kv.utils.isValidatable(observable)) {\n\t\t\t\tko.applyBindingsToNode(element, { validationElement: observable });\n\t\t\t}\n\t\t}\n\t};\n\n}());\n\n// override for KO's default 'value', 'checked', 'textInput' and selectedOptions bindings\nkv.makeBindingHandlerValidatable(\"value\");\nkv.makeBindingHandlerValidatable(\"checked\");\nif (ko.bindingHandlers.textInput) {\n\tkv.makeBindingHandlerValidatable(\"textInput\");\n}\nkv.makeBindingHandlerValidatable(\"selectedOptions\");\n\n\nko.bindingHandlers['validationMessage'] = { // individual error message, if modified or post binding\n\tupdate: function (element, valueAccessor) {\n\t\tvar obsv = valueAccessor(),\n\t\t\tconfig = kv.utils.getConfigOptions(element),\n\t\t\tval = unwrap(obsv),\n\t\t\tmsg = null,\n\t\t\tisModified = false,\n\t\t\tisValid = false;\n\n\t\tif (obsv === null || typeof obsv === 'undefined') {\n\t\t\tthrow new Error('Cannot bind validationMessage to undefined value. data-bind expression: ' +\n\t\t\t\telement.getAttribute('data-bind'));\n\t\t}\n\n\t\tisModified = obsv.isModified && obsv.isModified();\n\t\tisValid = obsv.isValid && obsv.isValid();\n\n\t\tvar error = null;\n\t\tif (!config.messagesOnModified || isModified) {\n\t\t\terror = isValid ? null : obsv.error;\n\t\t}\n\n\t\tvar isVisible = !config.messagesOnModified || isModified ? !isValid : false;\n\t\tvar isCurrentlyVisible = element.style.display !== \"none\";\n\n\t\tif (config.allowHtmlMessages) {\n\t\t\tkoUtils.setHtml(element, error);\n\t\t} else {\n\t\t\tko.bindingHandlers.text.update(element, function () { return error; });\n\t\t}\n\n\t\tif (isCurrentlyVisible && !isVisible) {\n\t\t\telement.style.display = 'none';\n\t\t} else if (!isCurrentlyVisible && isVisible) {\n\t\t\telement.style.display = '';\n\t\t}\n\t}\n};\n\nko.bindingHandlers['validationElement'] = {\n\tupdate: function (element, valueAccessor, allBindingsAccessor) {\n\t\tvar obsv = valueAccessor(),\n\t\t\tconfig = kv.utils.getConfigOptions(element),\n\t\t\tval = unwrap(obsv),\n\t\t\tmsg = null,\n\t\t\tisModified = false,\n\t\t\tisValid = false;\n\n\t\tif (obsv === null || typeof obsv === 'undefined') {\n\t\t\tthrow new Error('Cannot bind validationElement to undefined value. data-bind expression: ' +\n\t\t\t\telement.getAttribute('data-bind'));\n\t\t}\n\n\t\tisModified = obsv.isModified && obsv.isModified();\n\t\tisValid = obsv.isValid && obsv.isValid();\n\n\t\t// create an evaluator function that will return something like:\n\t\t// css: { validationElement: true }\n\t\tvar cssSettingsAccessor = function () {\n\t\t\tvar css = {};\n\n\t\t\tvar shouldShow = ((!config.decorateElementOnModified || isModified) ? !isValid : false);\n\n\t\t\t// css: { validationElement: false }\n\t\t\tcss[config.errorElementClass] = shouldShow;\n\n\t\t\treturn css;\n\t\t};\n\n\t\t//add or remove class on the element;\n\t\tko.bindingHandlers.css.update(element, cssSettingsAccessor, allBindingsAccessor);\n\t\tif (!config.errorsAsTitle) { return; }\n\n\t\tko.bindingHandlers.attr.update(element, function () {\n\t\t\tvar\n\t\t\t\thasModification = !config.errorsAsTitleOnModified || isModified,\n\t\t\t\ttitle = kv.utils.getOriginalElementTitle(element);\n\n\t\t\tif (hasModification && !isValid) {\n\t\t\t\treturn { title: obsv.error, 'data-orig-title': title };\n\t\t\t} else if (!hasModification || isValid) {\n\t\t\t\treturn { title: title, 'data-orig-title': null };\n\t\t\t}\n\t\t});\n\t}\n};\n\n// ValidationOptions:\n// This binding handler allows you to override the initial config by setting any of the options for a specific element or context of elements\n//\n// Example:\n// <div data-bind=\"validationOptions: { insertMessages: true, messageTemplate: 'customTemplate', errorMessageClass: 'mySpecialClass'}\">\n//      <input type=\"text\" data-bind=\"value: someValue\"/>\n//      <input type=\"text\" data-bind=\"value: someValue2\"/>\n// </div>\nko.bindingHandlers['validationOptions'] = (function () {\n\treturn {\n\t\tinit: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n\t\t\tvar options = unwrap(valueAccessor());\n\t\t\tif (options) {\n\t\t\t\tvar newConfig = extend({}, kv.configuration);\n\t\t\t\textend(newConfig, options);\n\n\t\t\t\t//store the validation options on the node so we can retrieve it later\n\t\t\t\tkv.utils.setDomData(element, newConfig);\n\t\t\t}\n\t\t}\n\t};\n}());\n;// Validation Extender:\n// This is for creating custom validation logic on the fly\n// Example:\n// var test = ko.observable('something').extend{(\n//      validation: {\n//          validator: function(val, someOtherVal){\n//              return true;\n//          },\n//          message: \"Something must be really wrong!',\n//          params: true\n//      }\n//  )};\nko.extenders['validation'] = function (observable, rules) { // allow single rule or array\n\tforEach(kv.utils.isArray(rules) ? rules : [rules], function (rule) {\n\t\t// the 'rule' being passed in here has no name to identify a core Rule,\n\t\t// so we add it as an anonymous rule\n\t\t// If the developer is wanting to use a core Rule, but use a different message see the 'addExtender' logic for examples\n\t\tkv.addAnonymousRule(observable, rule);\n\t});\n\treturn observable;\n};\n\n//This is the extender that makes a Knockout Observable also 'Validatable'\n//examples include:\n// 1. var test = ko.observable('something').extend({validatable: true});\n// this will ensure that the Observable object is setup properly to respond to rules\n//\n// 2. test.extend({validatable: false});\n// this will remove the validation properties from the Observable object should you need to do that.\nko.extenders['validatable'] = function (observable, options) {\n\tif (!kv.utils.isObject(options)) {\n\t\toptions = { enable: options };\n\t}\n\n\tif (!('enable' in options)) {\n\t\toptions.enable = true;\n\t}\n\n\tif (options.enable && !kv.utils.isValidatable(observable)) {\n\t\tvar config = kv.configuration.validate || {};\n\t\tvar validationOptions = {\n\t\t\tthrottleEvaluation : options.throttle || config.throttle\n\t\t};\n\n\t\tobservable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid\n\n\t\t// observable.rules:\n\t\t// ObservableArray of Rule Contexts, where a Rule Context is simply the name of a rule and the params to supply to it\n\t\t//\n\t\t// Rule Context = { rule: '<rule name>', params: '<passed in params>', message: '<Override of default Message>' }\n\t\tobservable.rules = ko.observableArray(); //holds the rule Contexts to use as part of validation\n\n\t\t//in case async validation is occurring\n\t\tobservable.isValidating = ko.observable(false);\n\n\t\t//the true holder of whether the observable is valid or not\n\t\tobservable.__valid__ = ko.observable(true);\n\n\t\tobservable.isModified = ko.observable(false);\n\n\t\t// a semi-protected observable\n\t\tobservable.isValid = ko.computed(observable.__valid__);\n\n\t\t//manually set error state\n\t\tobservable.setError = function (error) {\n\t\t\tvar previousError = observable.error.peek();\n\t\t\tvar previousIsValid = observable.__valid__.peek();\n\n\t\t\tobservable.error(error);\n\t\t\tobservable.__valid__(false);\n\n\t\t\tif (previousError !== error && !previousIsValid) {\n\t\t\t\t// if the observable was not valid before then isValid will not mutate,\n\t\t\t\t// hence causing any grouping to not display the latest error.\n\t\t\t\tobservable.isValid.notifySubscribers();\n\t\t\t}\n\t\t};\n\n\t\t//manually clear error state\n\t\tobservable.clearError = function () {\n\t\t\tobservable.error(null);\n\t\t\tobservable.__valid__(true);\n\t\t\treturn observable;\n\t\t};\n\n\t\t//subscribe to changes in the observable\n\t\tvar h_change = observable.subscribe(function () {\n\t\t\tobservable.isModified(true);\n\t\t});\n\n\t\t// we use a computed here to ensure that anytime a dependency changes, the\n\t\t// validation logic evaluates\n\t\tvar h_obsValidationTrigger = ko.computed(extend({\n\t\t\tread: function () {\n\t\t\t\tvar obs = observable(),\n\t\t\t\t\truleContexts = observable.rules();\n\n\t\t\t\tkv.validateObservable(observable);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}, validationOptions));\n\n\t\textend(h_obsValidationTrigger, validationOptions);\n\n\t\tobservable._disposeValidation = function () {\n\t\t\t//first dispose of the subscriptions\n\t\t\tobservable.isValid.dispose();\n\t\t\tobservable.rules.removeAll();\n\t\t\th_change.dispose();\n\t\t\th_obsValidationTrigger.dispose();\n\n\t\t\tdelete observable['rules'];\n\t\t\tdelete observable['error'];\n\t\t\tdelete observable['isValid'];\n\t\t\tdelete observable['isValidating'];\n\t\t\tdelete observable['__valid__'];\n\t\t\tdelete observable['isModified'];\n            delete observable['setError'];\n            delete observable['clearError'];\n            delete observable['_disposeValidation'];\n\t\t};\n\t} else if (options.enable === false && observable._disposeValidation) {\n\t\tobservable._disposeValidation();\n\t}\n\treturn observable;\n};\n\nfunction validateSync(observable, rule, ctx) {\n\t//Execute the validator and see if its valid\n\tif (!rule.validator(observable(), (ctx.params === undefined ? true : unwrap(ctx.params)))) { // default param is true, eg. required = true\n\n\t\t//not valid, so format the error message and stick it in the 'error' variable\n\t\tobservable.setError(kv.formatMessage(\n\t\t\t\t\tctx.message || rule.message,\n\t\t\t\t\tunwrap(ctx.params),\n\t\t\t\t\tobservable));\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n}\n\nfunction validateAsync(observable, rule, ctx) {\n\tobservable.isValidating(true);\n\n\tvar callBack = function (valObj) {\n\t\tvar isValid = false,\n\t\t\tmsg = '';\n\n\t\tif (!observable.__valid__()) {\n\n\t\t\t// since we're returning early, make sure we turn this off\n\t\t\tobservable.isValidating(false);\n\n\t\t\treturn; //if its already NOT valid, don't add to that\n\t\t}\n\n\t\t//we were handed back a complex object\n\t\tif (valObj['message']) {\n\t\t\tisValid = valObj.isValid;\n\t\t\tmsg = valObj.message;\n\t\t} else {\n\t\t\tisValid = valObj;\n\t\t}\n\n\t\tif (!isValid) {\n\t\t\t//not valid, so format the error message and stick it in the 'error' variable\n\t\t\tobservable.error(kv.formatMessage(\n\t\t\t\tmsg || ctx.message || rule.message,\n\t\t\t\tunwrap(ctx.params),\n\t\t\t\tobservable));\n\t\t\tobservable.__valid__(isValid);\n\t\t}\n\n\t\t// tell it that we're done\n\t\tobservable.isValidating(false);\n\t};\n\n\tkv.utils.async(function() {\n\t    //fire the validator and hand it the callback\n        rule.validator(observable(), ctx.params === undefined ? true : unwrap(ctx.params), callBack);\n\t});\n}\n\nkv.validateObservable = function (observable) {\n\tvar i = 0,\n\t\trule, // the rule validator to execute\n\t\tctx, // the current Rule Context for the loop\n\t\truleContexts = observable.rules(), //cache for iterator\n\t\tlen = ruleContexts.length; //cache for iterator\n\n\tfor (; i < len; i++) {\n\n\t\t//get the Rule Context info to give to the core Rule\n\t\tctx = ruleContexts[i];\n\n\t\t// checks an 'onlyIf' condition\n\t\tif (ctx.condition && !ctx.condition()) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t//get the core Rule to use for validation\n\t\trule = ctx.rule ? kv.rules[ctx.rule] : ctx;\n\n\t\tif (rule['async'] || ctx['async']) {\n\t\t\t//run async validation\n\t\t\tvalidateAsync(observable, rule, ctx);\n\n\t\t} else {\n\t\t\t//run normal sync validation\n\t\t\tif (!validateSync(observable, rule, ctx)) {\n\t\t\t\treturn false; //break out of the loop\n\t\t\t}\n\t\t}\n\t}\n\t//finally if we got this far, make the observable valid again!\n\tobservable.clearError();\n\treturn true;\n};\n;\nvar _locales = {};\nvar _currentLocale;\n\nkv.defineLocale = function(name, values) {\n\tif (name && values) {\n\t\t_locales[name.toLowerCase()] = values;\n\t\treturn values;\n\t}\n\treturn null;\n};\n\nkv.locale = function(name) {\n\tif (name) {\n\t\tname = name.toLowerCase();\n\n\t\tif (_locales.hasOwnProperty(name)) {\n\t\t\tkv.localize(_locales[name]);\n\t\t\t_currentLocale = name;\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('Localization ' + name + ' has not been loaded.');\n\t\t}\n\t}\n\treturn _currentLocale;\n};\n\n//quick function to override rule messages\nkv.localize = function (msgTranslations) {\n\tvar rules = kv.rules;\n\n\t//loop the properties in the object and assign the msg to the rule\n\tfor (var ruleName in msgTranslations) {\n\t\tif (rules.hasOwnProperty(ruleName)) {\n\t\t\trules[ruleName].message = msgTranslations[ruleName];\n\t\t}\n\t}\n};\n\n// Populate default locale (this will make en-US.js somewhat redundant)\n(function() {\n\tvar localeData = {};\n\tvar rules = kv.rules;\n\n\tfor (var ruleName in rules) {\n\t\tif (rules.hasOwnProperty(ruleName)) {\n\t\t\tlocaleData[ruleName] = rules[ruleName].message;\n\t\t}\n\t}\n\tkv.defineLocale('en-us', localeData);\n})();\n\n// No need to invoke locale because the messages are already defined along with the rules for en-US\n_currentLocale = 'en-us';\n;/**\n * Possible invocations:\n * \t\tapplyBindingsWithValidation(viewModel)\n * \t\tapplyBindingsWithValidation(viewModel, options)\n * \t\tapplyBindingsWithValidation(viewModel, rootNode)\n *\t\tapplyBindingsWithValidation(viewModel, rootNode, options)\n */\nko.applyBindingsWithValidation = function (viewModel, rootNode, options) {\n\tvar node = document.body,\n\t\tconfig;\n\n\tif (rootNode && rootNode.nodeType) {\n\t\tnode = rootNode;\n\t\tconfig = options;\n\t}\n\telse {\n\t\tconfig = rootNode;\n\t}\n\n\tkv.init();\n\n\tif (config) {\n\t\tconfig = extend(extend({}, kv.configuration), config);\n\t\tkv.utils.setDomData(node, config);\n\t}\n\n\tko.applyBindings(viewModel, node);\n};\n\n//override the original applyBindings so that we can ensure all new rules and what not are correctly registered\nvar origApplyBindings = ko.applyBindings;\nko.applyBindings = function (viewModel, rootNode) {\n\n\tkv.init();\n\n\torigApplyBindings(viewModel, rootNode);\n};\n\nko.validatedObservable = function (initialValue, options) {\n\tif (!options && !kv.utils.isObject(initialValue)) {\n\t\treturn ko.observable(initialValue).extend({ validatable: true });\n\t}\n\n\tvar obsv = ko.observable(initialValue);\n\tobsv.errors = kv.group(kv.utils.isObject(initialValue) ? initialValue : {}, options);\n\tobsv.isValid = ko.observable(obsv.errors().length === 0);\n\n\tif (ko.isObservable(obsv.errors)) {\n\t\tobsv.errors.subscribe(function(errors) {\n\t\t\tobsv.isValid(errors.length === 0);\n\t\t});\n\t}\n\telse {\n\t\tko.computed(obsv.errors).subscribe(function (errors) {\n\t\t\tobsv.isValid(errors.length === 0);\n\t\t});\n\t}\n\n\tobsv.subscribe(function(newValue) {\n\t\tif (!kv.utils.isObject(newValue)) {\n\t\t\t/*\n\t\t\t * The validation group works on objects.\n\t\t\t * Since the new value is a primitive (scalar, null or undefined) we need\n\t\t\t * to create an empty object to pass along.\n\t\t\t */\n\t\t\tnewValue = {};\n\t\t}\n\t\t// Force the group to refresh\n\t\tobsv.errors._updateState(newValue);\n\t\tobsv.isValid(obsv.errors().length === 0);\n\t});\n\n\treturn obsv;\n};\n;}));\n\n//# sourceURL=webpack://domino/./node_modules/knockout.validation/dist/knockout.validation.js?");

/***/ }),

/***/ "./node_modules/knockout/build/output/knockout-latest.js":
/*!***************************************************************!*\
  !*** ./node_modules/knockout/build/output/knockout-latest.js ***!
  \***************************************************************/
/***/ ((module, exports, __webpack_require__) => {

eval("/* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Knockout JavaScript library v3.5.1\n * (c) The Knockout.js team - http://knockoutjs.com/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n\n(function() {(function(n){var A=this||(0,eval)(\"this\"),w=A.document,R=A.navigator,v=A.jQuery,H=A.JSON;v||\"undefined\"===typeof jQuery||(v=jQuery);(function(n){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports,__webpack_require__], __WEBPACK_AMD_DEFINE_FACTORY__ = (n),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0})(function(S,T){function K(a,c){return null===a||typeof a in W?a===c:!1}function X(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function Y(b,c){var d;return function(){clearTimeout(d);\nd=a.a.setTimeout(b,c)}}function Z(a,c){c&&\"change\"!==c?\"beforeChange\"===c?this.pc(a):this.gb(a,c):this.qc(a)}function aa(a,c){null!==c&&c.s&&c.s()}function ba(a,c){var d=this.qd,e=d[r];e.ra||(this.Qb&&this.mb[c]?(d.uc(c,a,this.mb[c]),this.mb[c]=null,--this.Qb):e.I[c]||d.uc(c,a,e.J?{da:a}:d.$c(a)),a.Ja&&a.gd())}var a=\"undefined\"!==typeof S?S:{};a.b=function(b,c){for(var d=b.split(\".\"),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.L=function(a,c,d){a[c]=d};a.version=\"3.5.1\";a.b(\"version\",\na.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1};a.a=function(){function b(a,b){for(var c in a)f.call(a,c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)f.call(b,c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var l=b[c].match(q)||[];a.a.D(d.match(q),function(b){a.a.Na(l,b,e)});b[c]=l.join(\" \")}var f=Object.prototype.hasOwnProperty,g={__proto__:[]}instanceof Array,h=\"function\"===typeof Symbol,m={},k={};m[R&&/Firefox\\/2/i.test(R.userAgent)?\n\"KeyboardEvent\":\"UIEvents\"]=[\"keyup\",\"keydown\",\"keypress\"];m.MouseEvents=\"click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave\".split(\" \");b(m,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)k[b[c]]=a});var l={propertychange:!0},p=w&&function(){for(var a=3,b=w.createElement(\"div\"),c=b.getElementsByTagName(\"i\");b.innerHTML=\"\\x3c!--[if gt IE \"+ ++a+\"]><i></i><![endif]--\\x3e\",c[0];);return 4<a?a:n}(),q=/\\S+/g,t;return{Jc:[\"authenticity_token\",/^__RequestVerificationToken(_.*)?$/],\nD:function(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c,a[d],d,a)},A:\"function\"==typeof Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Lb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return a[d];return n},Pa:function(b,c){var d=a.a.A(b,c);0<d?b.splice(d,1):0===d&&b.shift()},wc:function(b){var c=[];b&&a.a.D(b,function(b){0>a.a.A(c,b)&&c.push(b)});return c},Mb:function(a,\nb,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)d.push(b.call(c,a[e],e));return d},jb:function(a,b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)b.call(c,a[e],e)&&d.push(a[e]);return d},Nb:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},Na:function(b,c,d){var e=a.a.A(a.a.bc(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},Ba:g,extend:c,setPrototypeOf:d,Ab:g?d:c,P:b,Ga:function(a,b,c){if(!a)return a;var d={},e;for(e in a)f.call(a,e)&&(d[e]=\nb.call(c,a[e],e,a));return d},Tb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Yb:function(b){b=a.a.la(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement(\"div\"),d=0,e=b.length;d<e;d++)c.appendChild(a.oa(b[d]));return c},Ca:function(b,c){for(var d=0,e=b.length,l=[];d<e;d++){var k=b[d].cloneNode(!0);l.push(c?a.oa(k):k)}return l},va:function(b,c){a.a.Tb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},Xc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],\nl=e.parentNode,k=0,f=c.length;k<f;k++)l.insertBefore(c[k],e);k=0;for(f=d.length;k<f;k++)a.removeNode(d[k])}},Ua:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},Zc:function(a,b){7>p?a.setAttribute(\"selected\",b):a.selected=b},Db:function(a){return null===a||a===n?\"\":a.trim?\na.trim():a.toString().replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")},Ud:function(a,b){a=a||\"\";return b.length>a.length?!1:a.substring(0,b.length)===b},vd:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(1!==a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Sb:function(b){return a.a.vd(b,b.ownerDocument.documentElement)},kd:function(b){return!!a.a.Lb(b,a.a.Sb)},R:function(a){return a&&\na.tagName&&a.tagName.toLowerCase()},Ac:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Ac(b),c)},Gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,c,d){var e=a.a.Ac(d);d=l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||\"function\"!=typeof b.addEventListener)if(\"undefined\"!=typeof b.attachEvent){var k=function(a){e.call(b,a)},f=\"on\"+c;b.attachEvent(f,\nk);a.a.K.za(b,function(){b.detachEvent(f,k)})}else throw Error(\"Browser doesn't support addEventListener or attachEvent\");else b.addEventListener(c,e,!1);else t||(t=\"function\"==typeof v(b).on?\"on\":\"bind\"),v(b)[t](c,e)},Fb:function(b,c){if(!b||!b.nodeType)throw Error(\"element must be a DOM node when calling triggerEvent\");var d;\"input\"===a.a.R(b)&&b.type&&\"click\"==c.toLowerCase()?(d=b.type,d=\"checkbox\"==d||\"radio\"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if(\"function\"==typeof w.createEvent)if(\"function\"==\ntypeof b.dispatchEvent)d=w.createEvent(k[c]||\"HTMLEvents\"),d.initEvent(c,!0,!0,A,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error(\"The supplied element doesn't support dispatchEvent\");else if(d&&b.click)b.click();else if(\"undefined\"!=typeof b.fireEvent)b.fireEvent(\"on\"+c);else throw Error(\"Browser doesn't support triggering events\");else v(b).trigger(c)},f:function(b){return a.O(b)?b():b},bc:function(b){return a.O(b)?b.v():b},Eb:function(b,c,d){var l;c&&(\"object\"===typeof b.classList?\n(l=b.classList[d?\"add\":\"remove\"],a.a.D(c.match(q),function(a){l.call(b.classList,a)})):\"string\"===typeof b.className.baseVal?e(b.className,\"baseVal\",c,d):e(b,\"className\",c,d))},Bb:function(b,c){var d=a.a.f(c);if(null===d||d===n)d=\"\";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.va(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Ad(b)},Yc:function(a,b){a.name=b;if(7>=p)try{var c=a.name.replace(/[&<>'\"]/g,function(a){return\"&#\"+a.charCodeAt(0)+\";\"});a.mergeAttributes(w.createElement(\"<input name='\"+\nc+\"'/>\"),!1)}catch(d){}},Ad:function(a){9<=p&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},wd:function(a){if(p){var b=a.style.width;a.style.width=0;a.style.width=b}},Pd:function(b,c){b=a.a.f(b);c=a.a.f(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},la:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Da:function(a){return h?Symbol(a):a},Zd:6===p,$d:7===p,W:p,Lc:function(b,c){for(var d=a.a.la(b.getElementsByTagName(\"input\")).concat(a.a.la(b.getElementsByTagName(\"textarea\"))),\ne=\"string\"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},l=[],k=d.length-1;0<=k;k--)e(d[k])&&l.push(d[k]);return l},Nd:function(b){return\"string\"==typeof b&&(b=a.a.Db(b))?H&&H.parse?H.parse(b):(new Function(\"return \"+b))():null},hc:function(b,c,d){if(!H||!H.stringify)throw Error(\"Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js\");\nreturn H.stringify(a.a.f(b),c,d)},Od:function(c,d,e){e=e||{};var l=e.params||{},k=e.includeFields||this.Jc,f=c;if(\"object\"==typeof c&&\"form\"===a.a.R(c))for(var f=c.action,h=k.length-1;0<=h;h--)for(var g=a.a.Lc(c,k[h]),m=g.length-1;0<=m;m--)l[g[m].name]=g[m].value;d=a.a.f(d);var p=w.createElement(\"form\");p.style.display=\"none\";p.action=f;p.method=\"post\";for(var q in d)c=w.createElement(\"input\"),c.type=\"hidden\",c.name=q,c.value=a.a.hc(a.a.f(d[q])),p.appendChild(c);b(l,function(a,b){var c=w.createElement(\"input\");\nc.type=\"hidden\";c.name=a;c.value=b;p.appendChild(c)});w.body.appendChild(p);e.submitter?e.submitter(p):p.submit();setTimeout(function(){p.parentNode.removeChild(p)},0)}}}();a.b(\"utils\",a.a);a.b(\"utils.arrayForEach\",a.a.D);a.b(\"utils.arrayFirst\",a.a.Lb);a.b(\"utils.arrayFilter\",a.a.jb);a.b(\"utils.arrayGetDistinctValues\",a.a.wc);a.b(\"utils.arrayIndexOf\",a.a.A);a.b(\"utils.arrayMap\",a.a.Mb);a.b(\"utils.arrayPushAll\",a.a.Nb);a.b(\"utils.arrayRemoveItem\",a.a.Pa);a.b(\"utils.cloneNodes\",a.a.Ca);a.b(\"utils.createSymbolOrString\",\na.a.Da);a.b(\"utils.extend\",a.a.extend);a.b(\"utils.fieldsIncludedWithJsonPost\",a.a.Jc);a.b(\"utils.getFormFields\",a.a.Lc);a.b(\"utils.objectMap\",a.a.Ga);a.b(\"utils.peekObservable\",a.a.bc);a.b(\"utils.postJson\",a.a.Od);a.b(\"utils.parseJson\",a.a.Nd);a.b(\"utils.registerEventHandler\",a.a.B);a.b(\"utils.stringifyJson\",a.a.hc);a.b(\"utils.range\",a.a.Pd);a.b(\"utils.toggleDomNodeCssClass\",a.a.Eb);a.b(\"utils.triggerEvent\",a.a.Fb);a.b(\"utils.unwrapObservable\",a.a.f);a.b(\"utils.objectForEach\",a.a.P);a.b(\"utils.addOrRemoveItem\",\na.a.Na);a.b(\"utils.setTextContent\",a.a.Bb);a.b(\"unwrap\",a.a.f);Function.prototype.bind||(Function.prototype.bind=function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.g=new function(){var b=0,c=\"__ko__\"+(new Date).getTime(),d={},e,f;a.a.W?(e=function(a,e){var f=a[c];if(!f||\"null\"===f||!d[f]){if(!e)return n;f=a[c]=\"ko\"+b++;d[f]=\n{}}return d[f]},f=function(a){var b=a[c];return b?(delete d[b],a[c]=null,!0):!1}):(e=function(a,b){var d=a[c];!d&&b&&(d=a[c]={});return d},f=function(a){return a[c]?(delete a[c],!0):!1});return{get:function(a,b){var c=e(a,!1);return c&&c[b]},set:function(a,b,c){(a=e(a,c!==n))&&(a[b]=c)},Ub:function(a,b,c){a=e(a,!0);return a[b]||(a[b]=c)},clear:f,Z:function(){return b++ +c}}};a.b(\"utils.domData\",a.a.g);a.b(\"utils.domData.clear\",a.a.g.clear);a.a.K=new function(){function b(b,c){var d=a.a.g.get(b,e);\nd===n&&c&&(d=[],a.a.g.set(b,e,d));return d}function c(c){var e=b(c,!1);if(e)for(var e=e.slice(0),k=0;k<e.length;k++)e[k](c);a.a.g.clear(c);a.a.K.cleanExternalData(c);g[c.nodeType]&&d(c.childNodes,!0)}function d(b,d){for(var e=[],l,f=0;f<b.length;f++)if(!d||8===b[f].nodeType)if(c(e[e.length]=l=b[f]),b[f]!==l)for(;f--&&-1==a.a.A(e,b[f]););}var e=a.a.g.Z(),f={1:!0,8:!0,9:!0},g={1:!0,9:!0};return{za:function(a,c){if(\"function\"!=typeof c)throw Error(\"Callback must be a function\");b(a,!0).push(c)},yb:function(c,\nd){var f=b(c,!1);f&&(a.a.Pa(f,d),0==f.length&&a.a.g.set(c,e,n))},oa:function(b){a.u.G(function(){f[b.nodeType]&&(c(b),g[b.nodeType]&&d(b.getElementsByTagName(\"*\")))});return b},removeNode:function(b){a.oa(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&\"function\"==typeof v.cleanData&&v.cleanData([a])}}};a.oa=a.a.K.oa;a.removeNode=a.a.K.removeNode;a.b(\"cleanNode\",a.oa);a.b(\"removeNode\",a.removeNode);a.b(\"utils.domNodeDisposal\",a.a.K);a.b(\"utils.domNodeDisposal.addDisposeCallback\",\na.a.K.za);a.b(\"utils.domNodeDisposal.removeDisposeCallback\",a.a.K.yb);(function(){var b=[0,\"\",\"\"],c=[1,\"<table>\",\"</table>\"],d=[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],e=[1,\"<select multiple='multiple'>\",\"</select>\"],f={thead:c,tbody:c,tfoot:c,tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:d,th:d,option:e,optgroup:e},g=8>=a.a.W;a.a.ua=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var l=e[0];l.parentNode&&11!==l.parentNode.nodeType;)l=l.parentNode;\nl.parentNode&&l.parentNode.removeChild(l)}}else{(e=d)||(e=w);var l=e.parentWindow||e.defaultView||A,p=a.a.Db(c).toLowerCase(),q=e.createElement(\"div\"),t;t=(p=p.match(/^(?:\\x3c!--.*?--\\x3e\\s*?)*?<([a-z]+)[\\s>]/))&&f[p[1]]||b;p=t[0];t=\"ignored<div>\"+t[1]+c+t[2]+\"</div>\";\"function\"==typeof l.innerShiv?q.appendChild(l.innerShiv(t)):(g&&e.body.appendChild(q),q.innerHTML=t,g&&q.parentNode.removeChild(q));for(;p--;)q=q.lastChild;e=a.a.la(q.lastChild.childNodes)}return e};a.a.Md=function(b,c){var d=a.a.ua(b,\nc);return d.length&&d[0].parentElement||a.a.Yb(d)};a.a.fc=function(b,c){a.a.Tb(b);c=a.a.f(c);if(null!==c&&c!==n)if(\"string\"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ua(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b(\"utils.parseHtmlFragment\",a.a.ua);a.b(\"utils.setHtml\",a.a.fc);a.aa=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.aa.Uc(c.nodeValue);null!=f&&e.push({ud:c,Kd:f})}else if(1==c.nodeType)for(var f=0,g=c.childNodes,h=g.length;f<h;f++)b(g[f],\ne)}var c={};return{Xb:function(a){if(\"function\"!=typeof a)throw Error(\"You can only pass a function to ko.memoization.memoize()\");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return\"\\x3c!--[ko_memo:\"+b+\"]--\\x3e\"},bd:function(a,b){var f=c[a];if(f===n)throw Error(\"Couldn't find any memo with ID \"+a+\". Perhaps it's already been unmemoized.\");try{return f.apply(null,b||[]),!0}finally{delete c[a]}},cd:function(c,e){var f=\n[];b(c,f);for(var g=0,h=f.length;g<h;g++){var m=f[g].ud,k=[m];e&&a.a.Nb(k,e);a.aa.bd(f[g].Kd,k);m.nodeValue=\"\";m.parentNode&&m.parentNode.removeChild(m)}},Uc:function(a){return(a=a.match(/^\\[ko_memo\\:(.*?)\\]$/))?a[1]:null}}}();a.b(\"memoization\",a.aa);a.b(\"memoization.memoize\",a.aa.Xb);a.b(\"memoization.unmemoize\",a.aa.bd);a.b(\"memoization.parseMemoText\",a.aa.Uc);a.b(\"memoization.unmemoizeDomNodeAndDescendants\",a.aa.cd);a.na=function(){function b(){if(f)for(var b=f,c=0,d;h<f;)if(d=e[h++]){if(h>b){if(5E3<=\n++c){h=f;a.a.Gc(Error(\"'Too much recursion' after processing \"+c+\" task groups.\"));break}b=f}try{d()}catch(p){a.a.Gc(p)}}}function c(){b();h=f=e.length=0}var d,e=[],f=0,g=1,h=0;A.MutationObserver?d=function(a){var b=w.createElement(\"div\");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle(\"foo\")}}(c):d=w&&\"onreadystatechange\"in w.createElement(\"script\")?function(a){var b=w.createElement(\"script\");b.onreadystatechange=function(){b.onreadystatechange=null;w.documentElement.removeChild(b);\nb=null;a()};w.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,zb:function(b){f||a.na.scheduler(c);e[f++]=b;return g++},cancel:function(a){a=a-(g-f);a>=h&&a<f&&(e[a]=null)},resetForTesting:function(){var a=f-h;h=f=e.length=0;return a},Sd:b}}();a.b(\"tasks\",a.na);a.b(\"tasks.schedule\",a.na.zb);a.b(\"tasks.runEarly\",a.na.Sd);a.Ta={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.$({read:b,write:function(e){clearTimeout(d);d=a.a.setTimeout(function(){b(e)},\nc)}})},rateLimit:function(a,c){var d,e,f;\"number\"==typeof c?d=c:(d=c.timeout,e=c.method);a.Hb=!1;f=\"function\"==typeof e?e:\"notifyWhenChangesStop\"==e?Y:X;a.ub(function(a){return f(a,d,c)})},deferred:function(b,c){if(!0!==c)throw Error(\"The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.\");b.Hb||(b.Hb=!0,b.ub(function(c){var e,f=!1;return function(){if(!f){a.na.cancel(e);e=a.na.zb(c);try{f=!0,b.notifySubscribers(n,\"dirty\")}finally{f=\n!1}}}}))},notify:function(a,c){a.equalityComparer=\"always\"==c?null:K}};var W={undefined:1,\"boolean\":1,number:1,string:1};a.b(\"extenders\",a.Ta);a.ic=function(b,c,d){this.da=b;this.lc=c;this.mc=d;this.Ib=!1;this.fb=this.Jb=null;a.L(this,\"dispose\",this.s);a.L(this,\"disposeWhenNodeIsRemoved\",this.l)};a.ic.prototype.s=function(){this.Ib||(this.fb&&a.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)};a.ic.prototype.l=function(b){this.Jb=b;a.a.K.za(b,this.fb=this.s.bind(this))};\na.T=function(){a.a.Ab(this,D);D.qb(this)};var D={qb:function(a){a.U={change:[]};a.sc=1},subscribe:function(b,c,d){var e=this;d=d||\"change\";var f=new a.ic(e,c?b.bind(c):b,function(){a.a.Pa(e.U[d],f);e.hb&&e.hb(d)});e.Qa&&e.Qa(d);e.U[d]||(e.U[d]=[]);e.U[d].push(f);return f},notifySubscribers:function(b,c){c=c||\"change\";\"change\"===c&&this.Gb();if(this.Wa(c)){var d=\"change\"===c&&this.ed||this.U[c].slice(0);try{a.u.xc();for(var e=0,f;f=d[e];++e)f.Ib||f.lc(b)}finally{a.u.end()}}},ob:function(){return this.sc},\nDd:function(a){return this.ob()!==a},Gb:function(){++this.sc},ub:function(b){var c=this,d=a.O(c),e,f,g,h,m;c.gb||(c.gb=c.notifySubscribers,c.notifySubscribers=Z);var k=b(function(){c.Ja=!1;d&&h===c&&(h=c.nc?c.nc():c());var a=f||m&&c.sb(g,h);m=f=e=!1;a&&c.gb(g=h)});c.qc=function(a,b){b&&c.Ja||(m=!b);c.ed=c.U.change.slice(0);c.Ja=e=!0;h=a;k()};c.pc=function(a){e||(g=a,c.gb(a,\"beforeChange\"))};c.rc=function(){m=!0};c.gd=function(){c.sb(g,c.v(!0))&&(f=!0)}},Wa:function(a){return this.U[a]&&this.U[a].length},\nBd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var c=0;a.a.P(this.U,function(a,b){\"dirty\"!==a&&(c+=b.length)});return c},sb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},toString:function(){return\"[object Object]\"},extend:function(b){var c=this;b&&a.a.P(b,function(b,e){var f=a.Ta[b];\"function\"==typeof f&&(c=f(c,e)||c)});return c}};a.L(D,\"init\",D.qb);a.L(D,\"subscribe\",D.subscribe);a.L(D,\"extend\",D.extend);a.L(D,\"getSubscriptionsCount\",D.Bd);a.a.Ba&&a.a.setPrototypeOf(D,\nFunction.prototype);a.T.fn=D;a.Qc=function(a){return null!=a&&\"function\"==typeof a.subscribe&&\"function\"==typeof a.notifySubscribers};a.b(\"subscribable\",a.T);a.b(\"isSubscribable\",a.Qc);a.S=a.u=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{xc:b,end:c,cc:function(b){if(e){if(!a.Qc(b))throw Error(\"Only subscribable things can act as dependencies\");e.od.call(e.pd,b,b.fd||(b.fd=++f))}},G:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},qa:function(){if(e)return e.o.qa()},\nVa:function(){if(e)return e.o.Va()},Ya:function(){if(e)return e.Ya},o:function(){if(e)return e.o}}}();a.b(\"computedContext\",a.S);a.b(\"computedContext.getDependenciesCount\",a.S.qa);a.b(\"computedContext.getDependencies\",a.S.Va);a.b(\"computedContext.isInitial\",a.S.Ya);a.b(\"computedContext.registerDependency\",a.S.cc);a.b(\"ignoreDependencies\",a.Yd=a.u.G);var I=a.a.Da(\"_latestValue\");a.ta=function(b){function c(){if(0<arguments.length)return c.sb(c[I],arguments[0])&&(c.ya(),c[I]=arguments[0],c.xa()),this;\na.u.cc(c);return c[I]}c[I]=b;a.a.Ba||a.a.extend(c,a.T.fn);a.T.fn.qb(c);a.a.Ab(c,F);a.options.deferUpdates&&a.Ta.deferred(c,!0);return c};var F={equalityComparer:K,v:function(){return this[I]},xa:function(){this.notifySubscribers(this[I],\"spectate\");this.notifySubscribers(this[I])},ya:function(){this.notifySubscribers(this[I],\"beforeChange\")}};a.a.Ba&&a.a.setPrototypeOf(F,a.T.fn);var G=a.ta.Ma=\"__ko_proto__\";F[G]=a.ta;a.O=function(b){if((b=\"function\"==typeof b&&b[G])&&b!==F[G]&&b!==a.o.fn[G])throw Error(\"Invalid object that looks like an observable; possibly from another Knockout instance\");\nreturn!!b};a.Za=function(b){return\"function\"==typeof b&&(b[G]===F[G]||b[G]===a.o.fn[G]&&b.Nc)};a.b(\"observable\",a.ta);a.b(\"isObservable\",a.O);a.b(\"isWriteableObservable\",a.Za);a.b(\"isWritableObservable\",a.Za);a.b(\"observable.fn\",F);a.L(F,\"peek\",F.v);a.L(F,\"valueHasMutated\",F.xa);a.L(F,\"valueWillMutate\",F.ya);a.Ha=function(b){b=b||[];if(\"object\"!=typeof b||!(\"length\"in b))throw Error(\"The argument passed when initializing an observable array must be an array, or null, or undefined.\");b=a.ta(b);a.a.Ab(b,\na.Ha.fn);return b.extend({trackArrayChanges:!0})};a.Ha.fn={remove:function(b){for(var c=this.v(),d=[],e=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];if(e(g)){0===d.length&&this.ya();if(c[f]!==g)throw Error(\"Array modified during remove; cannot remove item\");d.push(g);c.splice(f,1);f--}}d.length&&this.xa();return d},removeAll:function(b){if(b===n){var c=this.v(),d=c.slice(0);this.ya();c.splice(0,c.length);this.xa();return d}return b?this.remove(function(c){return 0<=\na.a.A(b,c)}):[]},destroy:function(b){var c=this.v(),d=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b;this.ya();for(var e=c.length-1;0<=e;e--){var f=c[e];d(f)&&(f._destroy=!0)}this.xa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.A(b,c)}):[]},indexOf:function(b){var c=this();return a.a.A(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ya(),this.v()[d]=c,this.xa())},sorted:function(a){var c=this().slice(0);\nreturn a?c.sort(a):c.sort()},reversed:function(){return this().slice(0).reverse()}};a.a.Ba&&a.a.setPrototypeOf(a.Ha.fn,a.ta.fn);a.a.D(\"pop push reverse shift sort splice unshift\".split(\" \"),function(b){a.Ha.fn[b]=function(){var a=this.v();this.ya();this.zc(a,b,arguments);var d=a[b].apply(a,arguments);this.xa();return d===a?this:d}});a.a.D([\"slice\"],function(b){a.Ha.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.Pc=function(b){return a.O(b)&&\"function\"==typeof b.remove&&\"function\"==\ntypeof b.push};a.b(\"observableArray\",a.Ha);a.b(\"isObservableArray\",a.Pc);a.Ta.trackArrayChanges=function(b,c){function d(){function c(){if(m){var d=[].concat(b.v()||[]),e;if(b.Wa(\"arrayChange\")){if(!f||1<m)f=a.a.Pb(k,d,b.Ob);e=f}k=d;f=null;m=0;e&&e.length&&b.notifySubscribers(e,\"arrayChange\")}}e?c():(e=!0,h=b.subscribe(function(){++m},null,\"spectate\"),k=[].concat(b.v()||[]),f=null,g=b.subscribe(c))}b.Ob={};c&&\"object\"==typeof c&&a.a.extend(b.Ob,c);b.Ob.sparse=!0;if(!b.zc){var e=!1,f=null,g,h,m=0,\nk,l=b.Qa,p=b.hb;b.Qa=function(a){l&&l.call(b,a);\"arrayChange\"===a&&d()};b.hb=function(a){p&&p.call(b,a);\"arrayChange\"!==a||b.Wa(\"arrayChange\")||(g&&g.s(),h&&h.s(),h=g=null,e=!1,k=n)};b.zc=function(b,c,d){function l(a,b,c){return k[k.length]={status:a,value:b,index:c}}if(e&&!m){var k=[],p=b.length,g=d.length,h=0;switch(c){case \"push\":h=p;case \"unshift\":for(c=0;c<g;c++)l(\"added\",d[c],h+c);break;case \"pop\":h=p-1;case \"shift\":p&&l(\"deleted\",b[h],h);break;case \"splice\":c=Math.min(Math.max(0,0>d[0]?p+d[0]:\nd[0]),p);for(var p=1===g?p:Math.min(c+(d[1]||0),p),g=c+g-2,h=Math.max(p,g),U=[],L=[],n=2;c<h;++c,++n)c<p&&L.push(l(\"deleted\",b[c],c)),c<g&&U.push(l(\"added\",d[n],c));a.a.Kc(L,U);break;default:return}f=k}}}};var r=a.a.Da(\"_state\");a.o=a.$=function(b,c,d){function e(){if(0<arguments.length){if(\"function\"===typeof f)f.apply(g.nb,arguments);else throw Error(\"Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\");return this}g.ra||\na.u.cc(e);(g.ka||g.J&&e.Xa())&&e.ha();return g.X}\"object\"===typeof b?d=b:(d=d||{},b&&(d.read=b));if(\"function\"!=typeof d.read)throw Error(\"Pass a function that returns the value of the ko.computed\");var f=d.write,g={X:n,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:d.read,nb:c||d.owner,l:d.disposeWhenNodeIsRemoved||d.l||null,Sa:d.disposeWhen||d.Sa,Rb:null,I:{},V:0,Ic:null};e[r]=g;e.Nc=\"function\"===typeof f;a.a.Ba||a.a.extend(e,a.T.fn);a.T.fn.qb(e);a.a.Ab(e,C);d.pure?(g.wb=!0,g.J=!0,a.a.extend(e,da)):\nd.deferEvaluation&&a.a.extend(e,ea);a.options.deferUpdates&&a.Ta.deferred(e,!0);g.l&&(g.jc=!0,g.l.nodeType||(g.l=null));g.J||d.deferEvaluation||e.ha();g.l&&e.ja()&&a.a.K.za(g.l,g.Rb=function(){e.s()});return e};var C={equalityComparer:K,qa:function(){return this[r].V},Va:function(){var b=[];a.a.P(this[r].I,function(a,d){b[d.Ka]=d.da});return b},Vb:function(b){if(!this[r].V)return!1;var c=this.Va();return-1!==a.a.A(c,b)?!0:!!a.a.Lb(c,function(a){return a.Vb&&a.Vb(b)})},uc:function(a,c,d){if(this[r].wb&&\nc===this)throw Error(\"A 'pure' computed must not be called recursively\");this[r].I[a]=d;d.Ka=this[r].V++;d.La=c.ob()},Xa:function(){var a,c,d=this[r].I;for(a in d)if(Object.prototype.hasOwnProperty.call(d,a)&&(c=d[a],this.Ia&&c.da.Ja||c.da.Dd(c.La)))return!0},Jd:function(){this.Ia&&!this[r].rb&&this.Ia(!1)},ja:function(){var a=this[r];return a.ka||0<a.V},Rd:function(){this.Ja?this[r].ka&&(this[r].sa=!0):this.Hc()},$c:function(a){if(a.Hb){var c=a.subscribe(this.Jd,this,\"dirty\"),d=a.subscribe(this.Rd,\nthis);return{da:a,s:function(){c.s();d.s()}}}return a.subscribe(this.Hc,this)},Hc:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[r].Ic),this[r].Ic=a.a.setTimeout(function(){b.ha(!0)},c)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var c=this[r],d=c.Sa,e=!1;if(!c.rb&&!c.ra){if(c.l&&!a.a.Sb(c.l)||d&&d()){if(!c.jc){this.s();return}}else c.jc=!1;c.rb=!0;try{e=this.zd(b)}finally{c.rb=!1}return e}},zd:function(b){var c=this[r],d=!1,e=c.wb?n:!c.V,d={qd:this,mb:c.I,Qb:c.V};a.u.xc({pd:d,\nod:ba,o:this,Ya:e});c.I={};c.V=0;var f=this.yd(c,d);c.V?d=this.sb(c.X,f):(this.s(),d=!0);d&&(c.J?this.Gb():this.notifySubscribers(c.X,\"beforeChange\"),c.X=f,this.notifySubscribers(c.X,\"spectate\"),!c.J&&b&&this.notifySubscribers(c.X),this.rc&&this.rc());e&&this.notifySubscribers(c.X,\"awake\");return d},yd:function(b,c){try{var d=b.Wc;return b.nb?d.call(b.nb):d()}finally{a.u.end(),c.Qb&&!b.J&&a.a.P(c.mb,aa),b.sa=b.ka=!1}},v:function(a){var c=this[r];(c.ka&&(a||!c.V)||c.J&&this.Xa())&&this.ha();return c.X},\nub:function(b){a.T.fn.ub.call(this,b);this.nc=function(){this[r].J||(this[r].sa?this.ha():this[r].ka=!1);return this[r].X};this.Ia=function(a){this.pc(this[r].X);this[r].ka=!0;a&&(this[r].sa=!0);this.qc(this,!a)}},s:function(){var b=this[r];!b.J&&b.I&&a.a.P(b.I,function(a,b){b.s&&b.s()});b.l&&b.Rb&&a.a.K.yb(b.l,b.Rb);b.I=n;b.V=0;b.ra=!0;b.sa=!1;b.ka=!1;b.J=!1;b.l=n;b.Sa=n;b.Wc=n;this.Nc||(b.nb=n)}},da={Qa:function(b){var c=this,d=c[r];if(!d.ra&&d.J&&\"change\"==b){d.J=!1;if(d.sa||c.Xa())d.I=null,d.V=\n0,c.ha()&&c.Gb();else{var e=[];a.a.P(d.I,function(a,b){e[b.Ka]=a});a.a.D(e,function(a,b){var e=d.I[a],m=c.$c(e.da);m.Ka=b;m.La=e.La;d.I[a]=m});c.Xa()&&c.ha()&&c.Gb()}d.ra||c.notifySubscribers(d.X,\"awake\")}},hb:function(b){var c=this[r];c.ra||\"change\"!=b||this.Wa(\"change\")||(a.a.P(c.I,function(a,b){b.s&&(c.I[a]={da:b.da,Ka:b.Ka,La:b.La},b.s())}),c.J=!0,this.notifySubscribers(n,\"asleep\"))},ob:function(){var b=this[r];b.J&&(b.sa||this.Xa())&&this.ha();return a.T.fn.ob.call(this)}},ea={Qa:function(a){\"change\"!=\na&&\"beforeChange\"!=a||this.v()}};a.a.Ba&&a.a.setPrototypeOf(C,a.T.fn);var N=a.ta.Ma;C[N]=a.o;a.Oc=function(a){return\"function\"==typeof a&&a[N]===C[N]};a.Fd=function(b){return a.Oc(b)&&b[r]&&b[r].wb};a.b(\"computed\",a.o);a.b(\"dependentObservable\",a.o);a.b(\"isComputed\",a.Oc);a.b(\"isPureComputed\",a.Fd);a.b(\"computed.fn\",C);a.L(C,\"peek\",C.v);a.L(C,\"dispose\",C.s);a.L(C,\"isActive\",C.ja);a.L(C,\"getDependenciesCount\",C.qa);a.L(C,\"getDependencies\",C.Va);a.xb=function(b,c){if(\"function\"===typeof b)return a.o(b,\nc,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.o(b,c)};a.b(\"pureComputed\",a.xb);(function(){function b(a,f,g){g=g||new d;a=f(a);if(\"object\"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};g.save(a,h);c(a,function(c){var d=f(a[c]);switch(typeof d){case \"boolean\":case \"number\":case \"string\":case \"function\":h[c]=d;break;case \"object\":case \"undefined\":var l=g.get(d);h[c]=l!==\nn?l:b(d,f,g)}});return h}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);\"function\"==typeof a.toJSON&&b(\"toJSON\")}else for(c in a)b(c)}function d(){this.keys=[];this.values=[]}a.ad=function(c){if(0==arguments.length)throw Error(\"When calling ko.toJS, pass the object you want to convert.\");return b(c,function(b){for(var c=0;a.O(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.ad(b);return a.a.hc(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys,\nb);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b(\"toJS\",a.ad);a.b(\"toJSON\",a.toJSON);a.Wd=function(b,c,d){function e(c){var e=a.xb(b,d).extend({ma:\"always\"}),h=e.subscribe(function(a){a&&(h.s(),c(a))});e.notifySubscribers(e.v());return h}return\"function\"!==typeof Promise||c?e(c.bind(d)):new Promise(e)};a.b(\"when\",a.Wd);(function(){a.w={M:function(b){switch(a.a.R(b)){case \"option\":return!0===b.__ko__hasDomDataOptionValue__?\na.a.g.get(b,a.c.options.$b):7>=a.a.W?b.getAttributeNode(\"value\")&&b.getAttributeNode(\"value\").specified?b.value:b.text:b.value;case \"select\":return 0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex]):n;default:return b.value}},cb:function(b,c,d){switch(a.a.R(b)){case \"option\":\"string\"===typeof c?(a.a.g.set(b,a.c.options.$b,n),\"__ko__hasDomDataOptionValue__\"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.g.set(b,a.c.options.$b,c),b.__ko__hasDomDataOptionValue__=!0,b.value=\"number\"===\ntypeof c?c:\"\");break;case \"select\":if(\"\"===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f<g;++f)if(h=a.w.M(b.options[f]),h==c||\"\"===h&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e,6===a.a.W&&a.a.setTimeout(function(){b.selectedIndex=e},0);break;default:if(null===c||c===n)c=\"\";b.value=c}}}})();a.b(\"selectExtensions\",a.w);a.b(\"selectExtensions.readValue\",a.w.M);a.b(\"selectExtensions.writeValue\",a.w.cb);a.m=function(){function b(b){b=a.a.Db(b);123===b.charCodeAt(0)&&(b=b.slice(1,\n-1));b+=\"\\n,\";var c=[],d=b.match(e),p,q=[],h=0;if(1<d.length){for(var x=0,B;B=d[x];++x){var u=B.charCodeAt(0);if(44===u){if(0>=h){c.push(p&&q.length?{key:p,value:q.join(\"\")}:{unknown:p||q.join(\"\")});p=h=0;q=[];continue}}else if(58===u){if(!h&&!p&&1===q.length){p=q.pop();continue}}else if(47===u&&1<B.length&&(47===B.charCodeAt(1)||42===B.charCodeAt(1)))continue;else 47===u&&x&&1<B.length?(u=d[x-1].match(f))&&!g[u[0]]&&(b=b.substr(b.indexOf(B)+1),d=b.match(e),x=-1,B=\"/\"):40===u||123===u||91===u?++h:\n41===u||125===u||93===u?--h:p||q.length||34!==u&&39!==u||(B=B.slice(1,-1));q.push(B)}if(0<h)throw Error(\"Unbalanced parentheses, braces, or brackets\");}return c}var c=[\"true\",\"false\",\"null\",\"undefined\"],d=/^(?:[$_a-z][$\\w]*|(.+)(\\.\\s*[$_a-z][$\\w]*|\\[.+\\]))$/i,e=RegExp(\"\\\"(?:\\\\\\\\.|[^\\\"])*\\\"|'(?:\\\\\\\\.|[^'])*'|`(?:\\\\\\\\.|[^`])*`|/\\\\*(?:[^*]|\\\\*+[^*/])*\\\\*+/|//.*\\n|/(?:\\\\\\\\.|[^/])+/w*|[^\\\\s:,/][^,\\\"'`{}()/:[\\\\]]*[^\\\\s,\\\"'`{}()/:[\\\\]]|[^\\\\s]\",\"g\"),f=/[\\])\"'A-Za-z0-9_$]+$/,g={\"in\":1,\"return\":1,\"typeof\":1},\nh={};return{Ra:[],wa:h,ac:b,vb:function(e,f){function l(b,e){var f;if(!x){var k=a.getBindingHandler(b);if(k&&k.preprocess&&!(e=k.preprocess(e,b,l)))return;if(k=h[b])f=e,0<=a.a.A(c,f)?f=!1:(k=f.match(d),f=null===k?!1:k[1]?\"Object(\"+k[1]+\")\"+k[2]:f),k=f;k&&q.push(\"'\"+(\"string\"==typeof h[b]?h[b]:b)+\"':function(_z){\"+f+\"=_z}\")}g&&(e=\"function(){return \"+e+\" }\");p.push(\"'\"+b+\"':\"+e)}f=f||{};var p=[],q=[],g=f.valueAccessors,x=f.bindingParams,B=\"string\"===typeof e?b(e):e;a.a.D(B,function(a){l(a.key||a.unknown,\na.value)});q.length&&l(\"_ko_property_writers\",\"{\"+q.join(\",\")+\" }\");return p.join(\",\")},Id:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},eb:function(b,c,d,e,f){if(b&&a.O(b))!a.Za(b)||f&&b.v()===e||b(e);else if((b=c.get(\"_ko_property_writers\"))&&b[d])b[d](e)}}}();a.b(\"expressionRewriting\",a.m);a.b(\"expressionRewriting.bindingRewriteValidators\",a.m.Ra);a.b(\"expressionRewriting.parseObjectLiteral\",a.m.ac);a.b(\"expressionRewriting.preProcessBindings\",a.m.vb);a.b(\"expressionRewriting._twoWayBindings\",\na.m.wa);a.b(\"jsonExpressionRewriting\",a.m);a.b(\"jsonExpressionRewriting.insertPropertyAccessorsIntoJson\",a.m.vb);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function d(d,e){for(var f=d,h=1,g=[];f=f.nextSibling;){if(c(f)&&(a.a.g.set(f,k,!0),h--,0===h))return g;g.push(f);b(f)&&h++}if(!e)throw Error(\"Cannot find closing comment tag to match: \"+d.nodeValue);return null}function e(a,b){var c=d(a,b);return c?\n0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=w&&\"\\x3c!--test--\\x3e\"===w.createComment(\"test\").text,g=f?/^\\x3c!--\\s*ko(?:\\s+([\\s\\S]+))?\\s*--\\x3e$/:/^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/,h=f?/^\\x3c!--\\s*\\/ko\\s*--\\x3e$/:/^\\s*\\/ko\\s*$/,m={ul:!0,ol:!0},k=\"__ko_matchedEndComment__\";a.h={ea:{},childNodes:function(a){return b(a)?d(a):a.childNodes},Ea:function(c){if(b(c)){c=a.h.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Tb(c)},va:function(c,d){if(b(c)){a.h.Ea(c);for(var e=\nc.nextSibling,f=0,k=d.length;f<k;f++)e.parentNode.insertBefore(d[f],e)}else a.a.va(c,d)},Vc:function(a,c){var d;b(a)?(d=a.nextSibling,a=a.parentNode):d=a.firstChild;d?c!==d&&a.insertBefore(c,d):a.appendChild(c)},Wb:function(c,d,e){e?(e=e.nextSibling,b(c)&&(c=c.parentNode),e?d!==e&&c.insertBefore(d,e):c.appendChild(d)):a.h.Vc(c,d)},firstChild:function(a){if(b(a))return!a.nextSibling||c(a.nextSibling)?null:a.nextSibling;if(a.firstChild&&c(a.firstChild))throw Error(\"Found invalid end comment, as the first child of \"+\na);return a.firstChild},nextSibling:function(d){b(d)&&(d=e(d));if(d.nextSibling&&c(d.nextSibling)){var f=d.nextSibling;if(c(f)&&!a.a.g.get(f,k))throw Error(\"Found end comment without a matching opening comment, as child of \"+d);return null}return d.nextSibling},Cd:b,Vd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},Sc:function(d){if(m[a.a.R(d)]){var f=d.firstChild;if(f){do if(1===f.nodeType){var k;k=f.firstChild;var h=null;if(k){do if(h)h.push(k);else if(b(k)){var g=e(k,!0);g?k=\ng:h=[k]}else c(k)&&(h=[k]);while(k=k.nextSibling)}if(k=h)for(h=f.nextSibling,g=0;g<k.length;g++)h?d.insertBefore(k[g],h):d.appendChild(k[g])}while(f=f.nextSibling)}}}}})();a.b(\"virtualElements\",a.h);a.b(\"virtualElements.allowedBindings\",a.h.ea);a.b(\"virtualElements.emptyNode\",a.h.Ea);a.b(\"virtualElements.insertAfter\",a.h.Wb);a.b(\"virtualElements.prepend\",a.h.Vc);a.b(\"virtualElements.setDomNodeChildren\",a.h.va);(function(){a.ga=function(){this.nd={}};a.a.extend(a.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=\nb.getAttribute(\"data-bind\")||a.j.getComponentNameForNode(b);case 8:return a.h.Cd(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.j.tc(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.j.tc(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute(\"data-bind\");case 8:return a.h.Vd(b);default:return null}},\nparseBindingsString:function(b,c,d,e){try{var f=this.nd,g=b+(e&&e.valueAccessors||\"\"),h;if(!(h=f[g])){var m,k=\"with($context){with($data||{}){return{\"+a.m.vb(b,e)+\"}}}\";m=new Function(\"$context\",\"$element\",k);h=f[g]=m}return h(c,d)}catch(l){throw l.message=\"Unable to parse bindings.\\nBindings value: \"+b+\"\\nMessage: \"+l.message,l;}}});a.ga.instance=new a.ga})();a.b(\"bindingProvider\",a.ga);(function(){function b(b){var c=(b=a.a.g.get(b,z))&&b.N;c&&(b.N=null,c.Tc())}function c(c,d,e){this.node=c;this.yc=\nd;this.kb=[];this.H=!1;d.N||a.a.K.za(c,b);e&&e.N&&(e.N.kb.push(c),this.Kb=e)}function d(a){return function(){return a}}function e(a){return a()}function f(b){return a.a.Ga(a.u.G(b),function(a,c){return function(){return b()[c]}})}function g(b,c,e){return\"function\"===typeof b?f(b.bind(null,c,e)):a.a.Ga(b,d)}function h(a,b){return f(this.getBindings.bind(this,a,b))}function m(b,c){var d=a.h.firstChild(c);if(d){var e,f=a.ga.instance,l=f.preprocessNode;if(l){for(;e=d;)d=a.h.nextSibling(e),l.call(f,e);\nd=a.h.firstChild(c)}for(;e=d;)d=a.h.nextSibling(e),k(b,e)}a.i.ma(c,a.i.H)}function k(b,c){var d=b,e=1===c.nodeType;e&&a.h.Sc(c);if(e||a.ga.instance.nodeHasBindings(c))d=p(c,null,b).bindingContextForDescendants;d&&!u[a.a.R(c)]&&m(d,c)}function l(b){var c=[],d={},e=[];a.a.P(b,function ca(f){if(!d[f]){var k=a.getBindingHandler(f);k&&(k.after&&(e.push(f),a.a.D(k.after,function(c){if(b[c]){if(-1!==a.a.A(e,c))throw Error(\"Cannot combine the following bindings, because they have a cyclic dependency: \"+e.join(\", \"));\nca(c)}}),e.length--),c.push({key:f,Mc:k}));d[f]=!0}});return c}function p(b,c,d){var f=a.a.g.Ub(b,z,{}),k=f.hd;if(!c){if(k)throw Error(\"You cannot apply bindings multiple times to the same element.\");f.hd=!0}k||(f.context=d);f.Zb||(f.Zb={});var g;if(c&&\"function\"!==typeof c)g=c;else{var p=a.ga.instance,q=p.getBindingAccessors||h,m=a.$(function(){if(g=c?c(d,b):q.call(p,b,d)){if(d[t])d[t]();if(d[B])d[B]()}return g},null,{l:b});g&&m.ja()||(m=null)}var x=d,u;if(g){var J=function(){return a.a.Ga(m?m():\ng,e)},r=m?function(a){return function(){return e(m()[a])}}:function(a){return g[a]};J.get=function(a){return g[a]&&e(r(a))};J.has=function(a){return a in g};a.i.H in g&&a.i.subscribe(b,a.i.H,function(){var c=(0,g[a.i.H])();if(c){var d=a.h.childNodes(b);d.length&&c(d,a.Ec(d[0]))}});a.i.pa in g&&(x=a.i.Cb(b,d),a.i.subscribe(b,a.i.pa,function(){var c=(0,g[a.i.pa])();c&&a.h.firstChild(b)&&c(b)}));f=l(g);a.a.D(f,function(c){var d=c.Mc.init,e=c.Mc.update,f=c.key;if(8===b.nodeType&&!a.h.ea[f])throw Error(\"The binding '\"+\nf+\"' cannot be used with virtual elements\");try{\"function\"==typeof d&&a.u.G(function(){var a=d(b,r(f),J,x.$data,x);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error(\"Multiple bindings (\"+u+\" and \"+f+\") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.\");u=f}}),\"function\"==typeof e&&a.$(function(){e(b,r(f),J,x.$data,x)},null,{l:b})}catch(k){throw k.message='Unable to process binding \"'+f+\": \"+g[f]+'\"\\nMessage: '+k.message,\nk;}})}f=u===n;return{shouldBindDescendants:f,bindingContextForDescendants:f&&x}}function q(b,c){return b&&b instanceof a.fa?b:new a.fa(b,n,n,c)}var t=a.a.Da(\"_subscribable\"),x=a.a.Da(\"_ancestorBindingInfo\"),B=a.a.Da(\"_dataDependency\");a.c={};var u={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.c[b]};var J={};a.fa=function(b,c,d,e,f){function k(){var b=p?h():h,f=a.a.f(b);c?(a.a.extend(l,c),x in c&&(l[x]=c[x])):(l.$parents=[],l.$root=f,l.ko=a);l[t]=q;g?f=l.$data:(l.$rawData=\nb,l.$data=f);d&&(l[d]=f);e&&e(l,c,f);if(c&&c[t]&&!a.S.o().Vb(c[t]))c[t]();m&&(l[B]=m);return l.$data}var l=this,g=b===J,h=g?n:b,p=\"function\"==typeof h&&!a.O(h),q,m=f&&f.dataDependency;f&&f.exportDependencies?k():(q=a.xb(k),q.v(),q.ja()?q.equalityComparer=null:l[t]=n)};a.fa.prototype.createChildContext=function(b,c,d,e){!e&&c&&\"object\"==typeof c&&(e=c,c=e.as,d=e.extend);if(c&&e&&e.noChildContext){var f=\"function\"==typeof b&&!a.O(b);return new a.fa(J,this,null,function(a){d&&d(a);a[c]=f?b():b},e)}return new a.fa(b,\nthis,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)},e)};a.fa.prototype.extend=function(b,c){return new a.fa(J,this,null,function(c){a.a.extend(c,\"function\"==typeof b?b(c):b)},c)};var z=a.a.g.Z();c.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)};c.prototype.sd=function(b){a.a.Pa(this.kb,b);!this.kb.length&&this.H&&this.Cc()};c.prototype.Cc=function(){this.H=!0;this.yc.N&&!this.kb.length&&(this.yc.N=\nnull,a.a.K.yb(this.node,b),a.i.ma(this.node,a.i.pa),this.Tc())};a.i={H:\"childrenComplete\",pa:\"descendantsComplete\",subscribe:function(b,c,d,e,f){var k=a.a.g.Ub(b,z,{});k.Fa||(k.Fa=new a.T);f&&f.notifyImmediately&&k.Zb[c]&&a.u.G(d,e,[b]);return k.Fa.subscribe(d,e,c)},ma:function(b,c){var d=a.a.g.get(b,z);if(d&&(d.Zb[c]=!0,d.Fa&&d.Fa.notifySubscribers(b,c),c==a.i.H))if(d.N)d.N.Cc();else if(d.N===n&&d.Fa&&d.Fa.Wa(a.i.pa))throw Error(\"descendantsComplete event not supported for bindings on this node\");\n},Cb:function(b,d){var e=a.a.g.Ub(b,z,{});e.N||(e.N=new c(b,e,d[x]));return d[x]==e?d:d.extend(function(a){a[x]=e})}};a.Td=function(b){return(b=a.a.g.get(b,z))&&b.context};a.ib=function(b,c,d){1===b.nodeType&&a.h.Sc(b);return p(b,c,q(d))};a.ld=function(b,c,d){d=q(d);return a.ib(b,g(c,d,b),d)};a.Oa=function(a,b){1!==b.nodeType&&8!==b.nodeType||m(q(a),b)};a.vc=function(a,b,c){!v&&A.jQuery&&(v=A.jQuery);if(2>arguments.length){if(b=w.body,!b)throw Error(\"ko.applyBindings: could not find document.body; has the document been loaded?\");\n}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error(\"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node\");k(q(a,c),b)};a.Dc=function(b){return!b||1!==b.nodeType&&8!==b.nodeType?n:a.Td(b)};a.Ec=function(b){return(b=a.Dc(b))?b.$data:n};a.b(\"bindingHandlers\",a.c);a.b(\"bindingEvent\",a.i);a.b(\"bindingEvent.subscribe\",a.i.subscribe);a.b(\"bindingEvent.startPossiblyAsyncContentBinding\",a.i.Cb);a.b(\"applyBindings\",a.vc);a.b(\"applyBindingsToDescendants\",a.Oa);\na.b(\"applyBindingAccessorsToNode\",a.ib);a.b(\"applyBindingsToNode\",a.ld);a.b(\"contextFor\",a.Dc);a.b(\"dataFor\",a.Ec)})();(function(b){function c(c,e){var k=Object.prototype.hasOwnProperty.call(f,c)?f[c]:b,l;k?k.subscribe(e):(k=f[c]=new a.T,k.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Gd:e};delete f[c];l||e?k.notifySubscribers(b):a.na.zb(function(){k.notifySubscribers(b)})}),l=!0)}function d(a,b){e(\"getConfig\",[a],function(c){c?e(\"loadComponent\",[a,c],function(a){b(a,\nc)}):b(null,null)})}function e(c,d,f,l){l||(l=a.j.loaders.slice(0));var g=l.shift();if(g){var q=g[c];if(q){var t=!1;if(q.apply(g,d.concat(function(a){t?f(null):null!==a?f(a):e(c,d,f,l)}))!==b&&(t=!0,!g.suppressLoaderExceptions))throw Error(\"Component loaders must supply values by invoking the callback, not by returning values synchronously.\");}else e(c,d,f,l)}else f(null)}var f={},g={};a.j={get:function(d,e){var f=Object.prototype.hasOwnProperty.call(g,d)?g[d]:b;f?f.Gd?a.u.G(function(){e(f.definition)}):\na.na.zb(function(){e(f.definition)}):c(d,e)},Bc:function(a){delete g[a]},oc:e};a.j.loaders=[];a.b(\"components\",a.j);a.b(\"components.get\",a.j.get);a.b(\"components.clearCachedDefinition\",a.j.Bc)})();(function(){function b(b,c,d,e){function g(){0===--B&&e(h)}var h={},B=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.j.oc(\"loadTemplate\",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.j.oc(\"loadViewModel\",[b,c],function(a){h[m]=a;g()})}):g()}function c(a,b,d){if(\"function\"===typeof b)d(function(a){return new b(a)});\nelse if(\"function\"===typeof b[m])d(b[m]);else if(\"instance\"in b){var e=b.instance;d(function(){return e})}else\"viewModel\"in b?c(a,b.viewModel,d):a(\"Unknown viewModel value: \"+b)}function d(b){switch(a.a.R(b)){case \"script\":return a.a.ua(b.text);case \"textarea\":return a.a.ua(b.value);case \"template\":if(e(b.content))return a.a.Ca(b.content.childNodes)}return a.a.Ca(b.childNodes)}function e(a){return A.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){\"string\"===typeof b.require?\nT||A.require?(T||A.require)([b.require],function(a){a&&\"object\"===typeof a&&a.Xd&&a[\"default\"]&&(a=a[\"default\"]);c(a)}):a(\"Uses require, but no AMD loader is present\"):c(b)}function g(a){return function(b){throw Error(\"Component '\"+a+\"': \"+b);}}var h={};a.j.register=function(b,c){if(!c)throw Error(\"Invalid configuration for \"+b);if(a.j.tb(b))throw Error(\"Component \"+b+\" is already registered\");h[b]=c};a.j.tb=function(a){return Object.prototype.hasOwnProperty.call(h,a)};a.j.unregister=function(b){delete h[b];\na.j.Bc(b)};a.j.Fc={getConfig:function(b,c){c(a.j.tb(b)?h[b]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if(\"string\"===typeof c)f(a.a.ua(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.la(c.childNodes));else if(c.element)if(c=c.element,A.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if(\"string\"===typeof c){var h=w.getElementById(c);h?f(d(h)):b(\"Cannot find element with ID \"+c)}else b(\"Unknown element type: \"+\nc);else b(\"Unknown template value: \"+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var m=\"createViewModel\";a.b(\"components.register\",a.j.register);a.b(\"components.isRegistered\",a.j.tb);a.b(\"components.unregister\",a.j.unregister);a.b(\"components.defaultLoader\",a.j.Fc);a.j.loaders.push(a.j.Fc);a.j.dd=h})();(function(){function b(b,e){var f=b.getAttribute(\"params\");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ga(f,function(c){return a.o(c,null,{l:b})}),g=a.a.Ga(f,\nfunction(c){var e=c.v();return c.ja()?a.o({read:function(){return a.a.f(c())},write:a.Za(e)&&function(a){c()(a)},l:b}):e});Object.prototype.hasOwnProperty.call(g,\"$raw\")||(g.$raw=f);return g}return{$raw:{}}}a.j.getComponentNameForNode=function(b){var c=a.a.R(b);if(a.j.tb(c)&&(-1!=c.indexOf(\"-\")||\"[object HTMLUnknownElement]\"==\"\"+b||8>=a.a.W&&b.tagName===c))return c};a.j.tc=function(c,e,f,g){if(1===e.nodeType){var h=a.j.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the \"component\" binding on a custom element matching a component');\nvar m={name:h,params:b(e,f)};c.component=g?function(){return m}:m}}return c};var c=new a.ga;9>a.a.W&&(a.j.register=function(a){return function(b){return a.apply(this,arguments)}}(a.j.register),w.createDocumentFragment=function(b){return function(){var c=b(),f=a.j.dd,g;for(g in f);return c}}(w.createDocumentFragment))})();(function(){function b(b,c,d){c=c.template;if(!c)throw Error(\"Component '\"+b+\"' has no template\");b=a.a.Ca(c);a.h.va(d,b)}function c(a,b,c){var d=a.createViewModel;return d?d.call(a,\nb,c):b}var d=0;a.c.component={init:function(e,f,g,h,m){function k(){var a=l&&l.dispose;\"function\"===typeof a&&a.call(l);q&&q.s();p=l=q=null}var l,p,q,t=a.a.la(a.h.childNodes(e));a.h.Ea(e);a.a.K.za(e,k);a.o(function(){var g=a.a.f(f()),h,u;\"string\"===typeof g?h=g:(h=a.a.f(g.name),u=a.a.f(g.params));if(!h)throw Error(\"No component name specified\");var n=a.i.Cb(e,m),z=p=++d;a.j.get(h,function(d){if(p===z){k();if(!d)throw Error(\"Unknown component '\"+h+\"'\");b(h,d,e);var f=c(d,u,{element:e,templateNodes:t});\nd=n.createChildContext(f,{extend:function(a){a.$component=f;a.$componentTemplateNodes=t}});f&&f.koDescendantsComplete&&(q=a.i.subscribe(e,a.i.pa,f.koDescendantsComplete,f));l=f;a.Oa(d,e)}})},null,{l:e});return{controlsDescendantBindings:!0}}};a.h.ea.component=!0})();var V={\"class\":\"className\",\"for\":\"htmlFor\"};a.c.attr={update:function(b,c){var d=a.a.f(c())||{};a.a.P(d,function(c,d){d=a.a.f(d);var g=c.indexOf(\":\"),g=\"lookupNamespaceURI\"in b&&0<g&&b.lookupNamespaceURI(c.substr(0,g)),h=!1===d||null===\nd||d===n;h?g?b.removeAttributeNS(g,c):b.removeAttribute(c):d=d.toString();8>=a.a.W&&c in V?(c=V[c],h?b.removeAttribute(c):b[c]=d):h||(g?b.setAttributeNS(g,c,d):b.setAttribute(c,d));\"name\"===c&&a.a.Yc(b,h?\"\":d)})}};(function(){a.c.checked={after:[\"value\",\"attr\"],init:function(b,c,d){function e(){var e=b.checked,f=g();if(!a.S.Ya()&&(e||!m&&!a.S.qa())){var k=a.u.G(c);if(l){var q=p?k.v():k,z=t;t=f;z!==f?e&&(a.a.Na(q,f,!0),a.a.Na(q,z,!1)):a.a.Na(q,f,e);p&&a.Za(k)&&k(q)}else h&&(f===n?f=e:e||(f=n)),a.m.eb(k,\nd,\"checked\",f,!0)}}function f(){var d=a.a.f(c()),e=g();l?(b.checked=0<=a.a.A(d,e),t=e):b.checked=h&&e===n?!!d:g()===d}var g=a.xb(function(){if(d.has(\"checkedValue\"))return a.a.f(d.get(\"checkedValue\"));if(q)return d.has(\"value\")?a.a.f(d.get(\"value\")):b.value}),h=\"checkbox\"==b.type,m=\"radio\"==b.type;if(h||m){var k=c(),l=h&&a.a.f(k)instanceof Array,p=!(l&&k.push&&k.splice),q=m||l,t=l?g():n;m&&!b.name&&a.c.uniqueName.init(b,function(){return!0});a.o(e,null,{l:b});a.a.B(b,\"click\",e);a.o(f,null,{l:b});\nk=n}}};a.m.wa.checked=!0;a.c.checkedValue={update:function(b,c){b.value=a.a.f(c())}}})();a.c[\"class\"]={update:function(b,c){var d=a.a.Db(a.a.f(c()));a.a.Eb(b,b.__ko__cssValue,!1);b.__ko__cssValue=d;a.a.Eb(b,d,!0)}};a.c.css={update:function(b,c){var d=a.a.f(c());null!==d&&\"object\"==typeof d?a.a.P(d,function(c,d){d=a.a.f(d);a.a.Eb(b,c,d)}):a.c[\"class\"].update(b,c)}};a.c.enable={update:function(b,c){var d=a.a.f(c());d&&b.disabled?b.removeAttribute(\"disabled\"):d||b.disabled||(b.disabled=!0)}};a.c.disable=\n{update:function(b,c){a.c.enable.update(b,function(){return!a.a.f(c())})}};a.c.event={init:function(b,c,d,e,f){var g=c()||{};a.a.P(g,function(g){\"string\"==typeof g&&a.a.B(b,g,function(b){var k,l=c()[g];if(l){try{var p=a.a.la(arguments);e=f.$data;p.unshift(e);k=l.apply(e,p)}finally{!0!==k&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+\"Bubble\")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.c.foreach={Rc:function(b){return function(){var c=b(),d=a.a.bc(c);\nif(!d||\"number\"==typeof d.length)return{foreach:c,templateEngine:a.ba.Ma};a.a.f(c);return{foreach:d.data,as:d.as,noChildContext:d.noChildContext,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.ba.Ma}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.Rc(c))},update:function(b,c,d,e,f){return a.c.template.update(b,a.c.foreach.Rc(c),d,e,f)}};a.m.Ra.foreach=!1;a.h.ea.foreach=\n!0;a.c.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if(\"activeElement\"in f){var g;try{g=f.activeElement}catch(l){g=f.body}e=g===b}f=c();a.m.eb(f,d,\"hasfocus\",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.B(b,\"focus\",f);a.a.B(b,\"focusin\",f);a.a.B(b,\"blur\",g);a.a.B(b,\"focusout\",g);b.__ko_hasfocusLastValue=!1},update:function(b,c){var d=!!a.a.f(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===\nd||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.u.G(a.a.Fb,null,[b,d?\"focusin\":\"focusout\"]))}};a.m.wa.hasfocus=!0;a.c.hasFocus=a.c.hasfocus;a.m.wa.hasFocus=\"hasfocus\";a.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.fc(b,c())}};(function(){function b(b,d,e){a.c[b]={init:function(b,c,h,m,k){var l,p,q={},t,x,n;if(d){m=h.get(\"as\");var u=h.get(\"noChildContext\");n=!(m&&u);q={as:m,noChildContext:u,exportDependencies:n}}x=(t=\n\"render\"==h.get(\"completeOn\"))||h.has(a.i.pa);a.o(function(){var h=a.a.f(c()),m=!e!==!h,u=!p,r;if(n||m!==l){x&&(k=a.i.Cb(b,k));if(m){if(!d||n)q.dataDependency=a.S.o();r=d?k.createChildContext(\"function\"==typeof h?h:c,q):a.S.qa()?k.extend(null,q):k}u&&a.S.qa()&&(p=a.a.Ca(a.h.childNodes(b),!0));m?(u||a.h.va(b,a.a.Ca(p)),a.Oa(r,b)):(a.h.Ea(b),t||a.i.ma(b,a.i.H));l=m}},null,{l:b});return{controlsDescendantBindings:!0}}};a.m.Ra[b]=!1;a.h.ea[b]=!0}b(\"if\");b(\"ifnot\",!1,!0);b(\"with\",!0)})();a.c.let={init:function(b,\nc,d,e,f){c=f.extend(c);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.let=!0;var Q={};a.c.options={init:function(b){if(\"select\"!==a.a.R(b))throw Error(\"options binding applies only to SELECT elements\");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.jb(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return\"function\"==d?b(a):\"string\"==d?a[b]:c}function g(c,d){if(x&&l)a.i.ma(b,a.i.H);else if(t.length){var e=\n0<=a.a.A(t,a.w.M(d[0]));a.a.Zc(d[0],e);x&&!e&&a.u.G(a.a.Fb,null,[b,\"change\"])}}var h=b.multiple,m=0!=b.length&&h?b.scrollTop:null,k=a.a.f(c()),l=d.get(\"valueAllowUnset\")&&d.has(\"value\"),p=d.get(\"optionsIncludeDestroyed\");c={};var q,t=[];l||(h?t=a.a.Mb(e(),a.w.M):0<=b.selectedIndex&&t.push(a.w.M(b.options[b.selectedIndex])));k&&(\"undefined\"==typeof k.length&&(k=[k]),q=a.a.jb(k,function(b){return p||b===n||null===b||!a.a.f(b._destroy)}),d.has(\"optionsCaption\")&&(k=a.a.f(d.get(\"optionsCaption\")),null!==\nk&&k!==n&&q.unshift(Q)));var x=!1;c.beforeRemove=function(a){b.removeChild(a)};k=g;d.has(\"optionsAfterRender\")&&\"function\"==typeof d.get(\"optionsAfterRender\")&&(k=function(b,c){g(0,c);a.u.G(d.get(\"optionsAfterRender\"),null,[c[0],b!==Q?b:n])});a.a.ec(b,q,function(c,e,g){g.length&&(t=!l&&g[0].selected?[a.w.M(g[0])]:[],x=!0);e=b.ownerDocument.createElement(\"option\");c===Q?(a.a.Bb(e,d.get(\"optionsCaption\")),a.w.cb(e,n)):(g=f(c,d.get(\"optionsValue\"),c),a.w.cb(e,a.a.f(g)),c=f(c,d.get(\"optionsText\"),g),\na.a.Bb(e,c));return[e]},c,k);if(!l){var B;h?B=t.length&&e().length<t.length:B=t.length&&0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex])!==t[0]:t.length||0<=b.selectedIndex;B&&a.u.G(a.a.Fb,null,[b,\"change\"])}(l||a.S.Ya())&&a.i.ma(b,a.i.H);a.a.wd(b);m&&20<Math.abs(m-b.scrollTop)&&(b.scrollTop=m)}};a.c.options.$b=a.a.g.Z();a.c.selectedOptions={init:function(b,c,d){function e(){var e=c(),f=[];a.a.D(b.getElementsByTagName(\"option\"),function(b){b.selected&&f.push(a.w.M(b))});a.m.eb(e,d,\"selectedOptions\",\nf)}function f(){var d=a.a.f(c()),e=b.scrollTop;d&&\"number\"==typeof d.length&&a.a.D(b.getElementsByTagName(\"option\"),function(b){var c=0<=a.a.A(d,a.w.M(b));b.selected!=c&&a.a.Zc(b,c)});b.scrollTop=e}if(\"select\"!=a.a.R(b))throw Error(\"selectedOptions binding applies only to SELECT elements\");var g;a.i.subscribe(b,a.i.H,function(){g?e():(a.a.B(b,\"change\",e),g=a.o(f,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}};a.m.wa.selectedOptions=!0;a.c.style={update:function(b,c){var d=a.a.f(c()||\n{});a.a.P(d,function(c,d){d=a.a.f(d);if(null===d||d===n||!1===d)d=\"\";if(v)v(b).css(c,d);else if(/^--/.test(c))b.style.setProperty(c,d);else{c=c.replace(/-(\\w)/g,function(a,b){return b.toUpperCase()});var g=b.style[c];b.style[c]=d;d===g||b.style[c]!=g||isNaN(d)||(b.style[c]=d+\"px\")}})}};a.c.submit={init:function(b,c,d,e,f){if(\"function\"!=typeof c())throw Error(\"The value for a submit binding must be a function\");a.a.B(b,\"submit\",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?\na.preventDefault():a.returnValue=!1)}})}};a.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Bb(b,c())}};a.h.ea.text=!0;(function(){if(A&&A.navigator){var b=function(a){if(a)return parseFloat(a[1])},c=A.navigator.userAgent,d,e,f,g,h;(d=A.opera&&A.opera.version&&parseInt(A.opera.version()))||(h=b(c.match(/Edge\\/([^ ]+)$/)))||b(c.match(/Chrome\\/([^ ]+)/))||(e=b(c.match(/Version\\/([^ ]+) Safari/)))||(f=b(c.match(/Firefox\\/([^ ]+)/)))||(g=a.a.W||b(c.match(/MSIE ([^ ]+)/)))||\n(g=b(c.match(/rv:([^ )]+)/)))}if(8<=g&&10>g)var m=a.a.g.Z(),k=a.a.g.Z(),l=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,k))&&c(b)},p=function(b,c){var d=b.ownerDocument;a.a.g.get(d,m)||(a.a.g.set(d,m,!0),a.a.B(d,\"selectionchange\",l));a.a.g.set(b,k,c)};a.c.textInput={init:function(b,c,k){function l(c,d){a.a.B(b,c,d)}function m(){var d=a.a.f(c());if(null===d||d===n)d=\"\";L!==n&&d===L?a.a.setTimeout(m,4):b.value!==d&&(y=!0,b.value=d,y=!1,v=b.value)}function r(){w||(L=b.value,w=a.a.setTimeout(z,\n4))}function z(){clearTimeout(w);L=w=n;var d=b.value;v!==d&&(v=d,a.m.eb(c(),k,\"textInput\",d))}var v=b.value,w,L,A=9==a.a.W?r:z,y=!1;g&&l(\"keypress\",z);11>g&&l(\"propertychange\",function(a){y||\"value\"!==a.propertyName||A(a)});8==g&&(l(\"keyup\",z),l(\"keydown\",z));p&&(p(b,A),l(\"dragend\",r));(!g||9<=g)&&l(\"input\",A);5>e&&\"textarea\"===a.a.R(b)?(l(\"keydown\",r),l(\"paste\",r),l(\"cut\",r)):11>d?l(\"keydown\",r):4>f?(l(\"DOMAutoComplete\",z),l(\"dragdrop\",z),l(\"drop\",z)):h&&\"number\"===b.type&&l(\"keydown\",r);l(\"change\",\nz);l(\"blur\",z);a.o(m,null,{l:b})}};a.m.wa.textInput=!0;a.c.textinput={preprocess:function(a,b,c){c(\"textInput\",a)}}})();a.c.uniqueName={init:function(b,c){if(c()){var d=\"ko_unique_\"+ ++a.c.uniqueName.rd;a.a.Yc(b,d)}}};a.c.uniqueName.rd=0;a.c.using={init:function(b,c,d,e,f){var g;d.has(\"as\")&&(g={as:d.get(\"as\"),noChildContext:d.get(\"noChildContext\")});c=f.createChildContext(c,g);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.using=!0;a.c.value={init:function(b,c,d){var e=a.a.R(b),f=\"input\"==\ne;if(!f||\"checkbox\"!=b.type&&\"radio\"!=b.type){var g=[],h=d.get(\"valueUpdate\"),m=!1,k=null;h&&(\"string\"==typeof h?g=[h]:g=a.a.wc(h),a.a.Pa(g,\"change\"));var l=function(){k=null;m=!1;var e=c(),f=a.w.M(b);a.m.eb(e,d,\"value\",f)};!a.a.W||!f||\"text\"!=b.type||\"off\"==b.autocomplete||b.form&&\"off\"==b.form.autocomplete||-1!=a.a.A(g,\"propertychange\")||(a.a.B(b,\"propertychange\",function(){m=!0}),a.a.B(b,\"focus\",function(){m=!1}),a.a.B(b,\"blur\",function(){m&&l()}));a.a.D(g,function(c){var d=l;a.a.Ud(c,\"after\")&&\n(d=function(){k=a.w.M(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.B(b,c,d)});var p;p=f&&\"file\"==b.type?function(){var d=a.a.f(c());null===d||d===n||\"\"===d?b.value=\"\":a.u.G(l)}:function(){var f=a.a.f(c()),g=a.w.M(b);if(null!==k&&f===k)a.a.setTimeout(p,0);else if(f!==g||g===n)\"select\"===e?(g=d.get(\"valueAllowUnset\"),a.w.cb(b,f,g),g||f===a.w.M(b)||a.u.G(l)):a.w.cb(b,f)};if(\"select\"===e){var q;a.i.subscribe(b,a.i.H,function(){q?d.get(\"valueAllowUnset\")?p():l():(a.a.B(b,\"change\",l),q=a.o(p,null,{l:b}))},\nnull,{notifyImmediately:!0})}else a.a.B(b,\"change\",l),a.o(p,null,{l:b})}else a.ib(b,{checkedValue:c})},update:function(){}};a.m.wa.value=!0;a.c.visible={update:function(b,c){var d=a.a.f(c()),e=\"none\"!=b.style.display;d&&!e?b.style.display=\"\":!d&&e&&(b.style.display=\"none\")}};a.c.hidden={update:function(b,c){a.c.visible.update(b,function(){return!a.a.f(c())})}};(function(b){a.c[b]={init:function(c,d,e,f,g){return a.c.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})(\"click\");\na.ca=function(){};a.ca.prototype.renderTemplateSource=function(){throw Error(\"Override renderTemplateSource\");};a.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error(\"Override createJavaScriptEvaluatorBlock\");};a.ca.prototype.makeTemplateSource=function(b,c){if(\"string\"==typeof b){c=c||w;var d=c.getElementById(b);if(!d)throw Error(\"Cannot find template with ID \"+b);return new a.C.F(d)}if(1==b.nodeType||8==b.nodeType)return new a.C.ia(b);throw Error(\"Unknown template type: \"+b);};a.ca.prototype.renderTemplate=\nfunction(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.ca.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data(\"isRewritten\")};a.ca.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data(\"isRewritten\",!0)};a.b(\"templateEngine\",a.ca);a.kc=function(){function b(b,c,d,h){b=a.m.ac(b);for(var m=a.m.Ra,k=0;k<b.length;k++){var l=b[k].key;if(Object.prototype.hasOwnProperty.call(m,\nl)){var p=m[l];if(\"function\"===typeof p){if(l=p(b[k].value))throw Error(l);}else if(!p)throw Error(\"This template engine does not support the '\"+l+\"' binding within its templates\");}}d=\"ko.__tr_ambtns(function($context,$element){return(function(){return{ \"+a.m.vb(b,{valueAccessors:!0})+\" } })()},'\"+d.toLowerCase()+\"')\";return h.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\\d*)(?:\\s+(?!data-bind\\s*=\\s*)[a-z0-9\\-]+(?:=(?:\\\"[^\\\"]*\\\"|\\'[^\\']*\\'|[^>]*))?)*\\s+)data-bind\\s*=\\s*([\"'])([\\s\\S]*?)\\3/gi,\nd=/\\x3c!--\\s*ko\\b\\s*([\\s\\S]*?)\\s*--\\x3e/g;return{xd:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kc.Ld(b,c)},d)},Ld:function(a,f){return a.replace(c,function(a,c,d,e,l){return b(l,c,d,f)}).replace(d,function(a,c){return b(c,\"\\x3c!-- ko --\\x3e\",\"#comment\",f)})},md:function(b,c){return a.aa.Xb(function(d,h){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.ib(m,b,h)})}}}();a.b(\"__tr_ambtns\",a.kc.md);(function(){a.C={};a.C.F=function(b){if(this.F=b){var c=\na.a.R(b);this.ab=\"script\"===c?1:\"textarea\"===c?2:\"template\"==c&&b.content&&11===b.content.nodeType?3:4}};a.C.F.prototype.text=function(){var b=1===this.ab?\"text\":2===this.ab?\"value\":\"innerHTML\";if(0==arguments.length)return this.F[b];var c=arguments[0];\"innerHTML\"===b?a.a.fc(this.F,c):this.F[b]=c};var b=a.a.g.Z()+\"_\";a.C.F.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.F,b+c);a.a.g.set(this.F,b+c,arguments[1])};var c=a.a.g.Z();a.C.F.prototype.nodes=function(){var b=this.F;\nif(0==arguments.length){var e=a.a.g.get(b,c)||{},f=e.lb||(3===this.ab?b.content:4===this.ab?b:n);if(!f||e.jd){var g=this.text();g&&g!==e.bb&&(f=a.a.Md(g,b.ownerDocument),a.a.g.set(b,c,{lb:f,bb:g,jd:!0}))}return f}e=arguments[0];this.ab!==n&&this.text(\"\");a.a.g.set(b,c,{lb:e})};a.C.ia=function(a){this.F=a};a.C.ia.prototype=new a.C.F;a.C.ia.prototype.constructor=a.C.ia;a.C.ia.prototype.text=function(){if(0==arguments.length){var b=a.a.g.get(this.F,c)||{};b.bb===n&&b.lb&&(b.bb=b.lb.innerHTML);return b.bb}a.a.g.set(this.F,\nc,{bb:arguments[0]})};a.b(\"templateSources\",a.C);a.b(\"templateSources.domElement\",a.C.F);a.b(\"templateSources.anonymousTemplate\",a.C.ia)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.ga.instance,m=h.preprocessNode;if(m){b(e,f,function(a,b){var c=a.previousSibling,d=m.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):\n(c.push(e,f),a.a.Ua(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.vc(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.aa.cd(b,[d])});a.a.Ua(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,m){m=m||{};var n=(b&&d(b)||f||{}).ownerDocument,B=m.templateEngine||g;a.kc.xd(f,B,n);f=B.renderTemplate(f,h,m,n);if(\"number\"!=typeof f.length||0<f.length&&\"number\"!=typeof f[0].nodeType)throw Error(\"Template engine must return an array of DOM nodes\");n=!1;switch(e){case \"replaceChildren\":a.h.va(b,\nf);n=!0;break;case \"replaceNode\":a.a.Xc(b,f);n=!0;break;case \"ignoreTargetNode\":break;default:throw Error(\"Unknown renderMode: \"+e);}n&&(c(f,h),m.afterRender&&a.u.G(m.afterRender,null,[f,h[m.as||\"$data\"]]),\"replaceChildren\"==e&&a.i.ma(b,a.i.H));return f}function f(b,c,d){return a.O(b)?b():\"function\"===typeof b?b(c,d):b}var g;a.gc=function(b){if(b!=n&&!(b instanceof a.ca))throw Error(\"templateEngine must inherit from ko.templateEngine\");g=b};a.dc=function(b,c,h,m,t){h=h||{};if((h.templateEngine||g)==\nn)throw Error(\"Set a template engine before calling renderTemplate\");t=t||\"replaceChildren\";if(m){var x=d(m);return a.$(function(){var g=c&&c instanceof a.fa?c:new a.fa(c,null,null,null,{exportDependencies:!0}),n=f(b,g.$data,g),g=e(m,t,n,g,h);\"replaceNode\"==t&&(m=g,x=d(m))},null,{Sa:function(){return!x||!a.a.Sb(x)},l:x&&\"replaceNode\"==t?x.parentNode:x})}return a.aa.Xb(function(d){a.dc(b,c,h,d,\"replaceNode\")})};a.Qd=function(b,d,g,h,m){function x(b,c){a.u.G(a.a.ec,null,[h,b,u,g,r,c]);a.i.ma(h,a.i.H)}\nfunction r(a,b){c(b,v);g.afterRender&&g.afterRender(b,a);v=null}function u(a,c){v=m.createChildContext(a,{as:z,noChildContext:g.noChildContext,extend:function(a){a.$index=c;z&&(a[z+\"Index\"]=c)}});var d=f(b,a,v);return e(h,\"ignoreTargetNode\",d,v,g)}var v,z=g.as,w=!1===g.includeDestroyed||a.options.foreachHidesDestroyed&&!g.includeDestroyed;if(w||g.beforeRemove||!a.Pc(d))return a.$(function(){var b=a.a.f(d)||[];\"undefined\"==typeof b.length&&(b=[b]);w&&(b=a.a.jb(b,function(b){return b===n||null===b||\n!a.a.f(b._destroy)}));x(b)},null,{l:h});x(d.v());var A=d.subscribe(function(a){x(d(),a)},null,\"arrayChange\");A.l(h);return A};var h=a.a.g.Z(),m=a.a.g.Z();a.c.template={init:function(b,c){var d=a.a.f(c());if(\"string\"==typeof d||\"name\"in d)a.h.Ea(b);else if(\"nodes\"in d){d=d.nodes||[];if(a.O(d))throw Error('The \"nodes\" option must be a plain, non-observable array.');var e=d[0]&&d[0].parentNode;e&&a.a.g.get(e,m)||(e=a.a.Yb(d),a.a.g.set(e,m,!0));(new a.C.ia(b)).nodes(e)}else if(d=a.h.childNodes(b),0<d.length)e=\na.a.Yb(d),(new a.C.ia(b)).nodes(e);else throw Error(\"Anonymous template defined, but no template content was provided\");return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c();c=a.a.f(g);d=!0;e=null;\"string\"==typeof c?c={}:(g=\"name\"in c?c.name:b,\"if\"in c&&(d=a.a.f(c[\"if\"])),d&&\"ifnot\"in c&&(d=!a.a.f(c.ifnot)),d&&!g&&(d=!1));\"foreach\"in c?e=a.Qd(g,d&&c.foreach||[],c,b,f):d?(d=f,\"data\"in c&&(d=f.createChildContext(c.data,{as:c.as,noChildContext:c.noChildContext,exportDependencies:!0})),\ne=a.dc(g,d,c,b)):a.h.Ea(b);f=e;(c=a.a.g.get(b,h))&&\"function\"==typeof c.s&&c.s();a.a.g.set(b,h,!f||f.ja&&!f.ja()?n:f)}};a.m.Ra.template=function(b){b=a.m.ac(b);return 1==b.length&&b[0].unknown||a.m.Id(b,\"name\")?null:\"This template engine does not support anonymous templates nested within its templates\"};a.h.ea.template=!0})();a.b(\"setTemplateEngine\",a.gc);a.b(\"renderTemplate\",a.dc);a.a.Kc=function(a,c,d){if(a.length&&c.length){var e,f,g,h,m;for(e=f=0;(!d||e<d)&&(h=a[f]);++f){for(g=0;m=c[g];++g)if(h.value===\nm.value){h.moved=m.index;m.moved=h.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.Pb=function(){function b(b,d,e,f,g){var h=Math.min,m=Math.max,k=[],l,p=b.length,q,n=d.length,r=n-p||1,v=p+n+1,u,w,z;for(l=0;l<=p;l++)for(w=u,k.push(u=[]),z=h(n,l+r),q=m(0,l-1);q<=z;q++)u[q]=q?l?b[l-1]===d[q-1]?w[q-1]:h(w[q]||v,u[q-1]||v)+1:q+1:l+1;h=[];m=[];r=[];l=p;for(q=n;l||q;)n=k[l][q]-1,q&&n===k[l][q-1]?m.push(h[h.length]={status:e,value:d[--q],index:q}):l&&n===k[l-1][q]?r.push(h[h.length]={status:f,value:b[--l],index:l}):\n(--q,--l,g.sparse||h.push({status:\"retained\",value:d[q]}));a.a.Kc(r,m,!g.dontLimitMoves&&10*p);return h.reverse()}return function(a,d,e){e=\"boolean\"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,\"added\",\"deleted\",e):b(d,a,\"deleted\",\"added\",e)}}();a.b(\"utils.compareArrays\",a.a.Pb);(function(){function b(b,c,d,h,m){var k=[],l=a.$(function(){var l=c(d,m,a.a.Ua(k,b))||[];0<k.length&&(a.a.Xc(k,l),h&&a.u.G(h,null,[d,l,m]));k.length=0;a.a.Nb(k,l)},null,{l:b,Sa:function(){return!a.a.kd(k)}});\nreturn{Y:k,$:l.ja()?l:n}}var c=a.a.g.Z(),d=a.a.g.Z();a.a.ec=function(e,f,g,h,m,k){function l(b){y={Aa:b,pb:a.ta(w++)};v.push(y);r||F.push(y)}function p(b){y=t[b];w!==y.pb.v()&&D.push(y);y.pb(w++);a.a.Ua(y.Y,e);v.push(y)}function q(b,c){if(b)for(var d=0,e=c.length;d<e;d++)a.a.D(c[d].Y,function(a){b(a,d,c[d].Aa)})}f=f||[];\"undefined\"==typeof f.length&&(f=[f]);h=h||{};var t=a.a.g.get(e,c),r=!t,v=[],u=0,w=0,z=[],A=[],C=[],D=[],F=[],y,I=0;if(r)a.a.D(f,l);else{if(!k||t&&t._countWaitingForRemove){var E=\na.a.Mb(t,function(a){return a.Aa});k=a.a.Pb(E,f,{dontLimitMoves:h.dontLimitMoves,sparse:!0})}for(var E=0,G,H,K;G=k[E];E++)switch(H=G.moved,K=G.index,G.status){case \"deleted\":for(;u<K;)p(u++);H===n&&(y=t[u],y.$&&(y.$.s(),y.$=n),a.a.Ua(y.Y,e).length&&(h.beforeRemove&&(v.push(y),I++,y.Aa===d?y=null:C.push(y)),y&&z.push.apply(z,y.Y)));u++;break;case \"added\":for(;w<K;)p(u++);H!==n?(A.push(v.length),p(H)):l(G.value)}for(;w<f.length;)p(u++);v._countWaitingForRemove=I}a.a.g.set(e,c,v);q(h.beforeMove,D);a.a.D(z,\nh.beforeRemove?a.oa:a.removeNode);var M,O,P;try{P=e.ownerDocument.activeElement}catch(N){}if(A.length)for(;(E=A.shift())!=n;){y=v[E];for(M=n;E;)if((O=v[--E].Y)&&O.length){M=O[O.length-1];break}for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M)}for(E=0;y=v[E];E++){y.Y||a.a.extend(y,b(e,g,y.Aa,m,y.pb));for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M);!y.Ed&&m&&(m(y.Aa,y.Y,y.pb),y.Ed=!0,M=y.Y[y.Y.length-1])}P&&e.ownerDocument.activeElement!=P&&P.focus();q(h.beforeRemove,C);for(E=0;E<C.length;++E)C[E].Aa=d;q(h.afterMove,D);\nq(h.afterAdd,F)}})();a.b(\"utils.setDomNodeChildrenFromArrayMapping\",a.a.ec);a.ba=function(){this.allowTemplateRewriting=!1};a.ba.prototype=new a.ca;a.ba.prototype.constructor=a.ba;a.ba.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.W?0:b.nodes)?b.nodes():null)return a.a.la(c.cloneNode(!0).childNodes);b=b.text();return a.a.ua(b,e)};a.ba.Ma=new a.ba;a.gc(a.ba.Ma);a.b(\"nativeTemplateEngine\",a.ba);(function(){a.$a=function(){var a=this.Hd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf(\"__\"))return 2}catch(a){}return 1}();\nthis.renderTemplateSource=function(b,e,f,g){g=g||w;f=f||{};if(2>a)throw Error(\"Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.\");var h=b.data(\"precompiled\");h||(h=b.text()||\"\",h=v.template(null,\"{{ko_with $item.koBindingContext}}\"+h+\"{{/ko_with}}\"),b.data(\"precompiled\",h));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(h,b,e);e.appendTo(g.createElement(\"div\"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return\"{{ko_code ((function() { return \"+\na+\" })()) }}\"};this.addTemplate=function(a,b){w.write(\"<script type='text/html' id='\"+a+\"'>\"+b+\"\\x3c/script>\")};0<a&&(v.tmpl.tag.ko_code={open:\"__.push($1 || '');\"},v.tmpl.tag.ko_with={open:\"with($1) {\",close:\"} \"})};a.$a.prototype=new a.ca;a.$a.prototype.constructor=a.$a;var b=new a.$a;0<b.Hd&&a.gc(b);a.b(\"jqueryTmplTemplateEngine\",a.$a)})()})})();})();\n\n\n//# sourceURL=webpack://domino/./node_modules/knockout/build/output/knockout-latest.js?");

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/amd define */
/******/ 	(() => {
/******/ 		__webpack_require__.amdD = function () {
/******/ 			throw new Error('define cannot be used indirect');
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module can't be inlined because the eval devtool is used.
/******/ 	__webpack_require__("./src/scripts/vendors/json2.js");
/******/ 	__webpack_require__("./src/scripts/vendors/bootstrap.js");
/******/ 	__webpack_require__("./src/scripts/vendors/toastr.js");
/******/ 	var __webpack_exports__ = __webpack_require__("./src/scripts/pages/account/viewModel.js");
/******/ 	
/******/ })()
;