{"version":3,"file":"static/js/4687.97a98eb1.chunk.js","mappings":"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AAI,IACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJtkE,GAAI,MACJukE,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJ,MAAO,MACPC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,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","sources":["webpack:///./node_modules/@okta/okta-signin-widget/src/authClient/oie.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/authClient/default.ts","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/_commonjsHelpers.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/handlebars.runtime.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/base.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/utils.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/utils.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/exception.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/exception.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/helpers.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/block-helper-missing.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/each.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/helper-missing.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/if.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/log.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/lookup.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/with.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/decorators.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/inline.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/logger.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/logger.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/proto-access.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/create-new-lookup-object.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/internal/proto-access.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/base.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/safe-string.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/runtime.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/wrapHelper.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/no-conflict.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/underscore-min.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/lib/underscore/underscore-min.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/underscore-wrapper.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/backbone.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/vendor/lib/backbone.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/framework/Collection.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/models/BaseCollection.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/framework/Model.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/models/Model.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/models/BaseModel.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/jquery-wrapper.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/BrowserFeatures.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/util/Logger.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/Bundles.ts","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/StringUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/SchemaUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/EnumTypeHelper.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/models/SchemaProperty.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/models/BaseSchema.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/Logger.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/SettingsModel.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/framework/View.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/TemplateUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/BaseView.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/components/Notification.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/BaseRouter.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/StateMachine.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/BaseController.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/ViewUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/components/BaseButtonLink.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/ButtonFactory.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/Class.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/_virtual/js.cookie.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/vendor/lib/js.cookie.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/Cookie.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/Clipboard.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/Keys.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/Util.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/handlebars/handle-url.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/handlebars/helper-i18n.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/framework/ListView.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/Backbone.ListView.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/components/BaseDropDown.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/FormUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/components/ReadModeBar.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/components/Toolbar.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/ErrorBanner.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/ErrorParser.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/InputContainer.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/InputRegistry.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/InputFactory.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/qtip2/dist/jquery.qtip.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/InputLabel.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/InputWrapper.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/BaseForm.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/vendor/plugins/chosen.jquery.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/components/Callout.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/util/Time.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/BaseInput.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/Select.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/BooleanSelect.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/DeletableBox.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/TextBoxSet.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/helpers/SchemaFormFactory.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/vendor/plugins/jquery.custominput.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/CheckBox.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/vendor/plugins/jquery.placeholder.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/TextBox.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/PasswordBox.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/Radio.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/courage/views/forms/inputs/InputGroup.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/util/scrollParent.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/@okta/courage-dist/esm/src/CourageForSigninWidget.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/Enums.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/Util.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/BaseLoginModel.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/BaseLoginController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/FormType.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/FormController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/AccountUnlockedController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/TimeUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/FactorUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/TextBox.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-factors/EnterPasscodeForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-factors/Footer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/ActivateTotpController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/admin-consent/ScopeItem.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/admin-consent/ScopeList.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/templates/consentLogoHeaderTemplate.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/AdminConsentRequiredController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/Errors.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/util/OAuthErrors.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/util/OAuth2Util.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/RouterUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/ErrorCodes.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-factors/BarcodeView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/BarcodePushController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/BarcodeTotpController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/consent/ScopeItem.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/consent/ScopeList.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/consent/ScopeCheckBox.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/SkipLink.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/ConsentRequiredController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/expired-password/Footer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/CustomPasswordExpiredController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/DeviceActivateController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/DeviceActivateTerminalController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollCustomFactorController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/Factor.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/HtmlErrorMessageView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollActivateCustomFactorController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/ResendEmailView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollActivateEmailController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/countryCallingCodes.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/CountryUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-factors/PhoneTextBox.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollCallAndSmsController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-choices/FactorList.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-choices/Footer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-choices/RequiredFactorList.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollChoicesController.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/vendor/duo_web_sdk/index.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollDuoController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollEmailController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollHotpController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollOnPremController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/ValidationUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollPasswordController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollQuestionController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollSymantecVipController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/StoreLinks.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollTotpController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/FidoUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollU2FController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/EnrollUser.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/ProfileSchema.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/RegistrationFormFactory.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enrollUser/EnrollUserForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/FooterWithBackLink.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollUserController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/CryptoUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/webauthn.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollWebauthnController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/Spinner.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollWindowsHelloController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollYubikeyController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnrollmentLinkSentController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/EnterPasscodePushFlowController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/ContactSupport.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/ForgotPasswordController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/CookieUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/PrimaryAuth.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/DeviceFingerprint.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/primary-auth/CustomButtons.js","webpack:///./node_modules/@okta/okta-signin-widget/packages/vendor/TypingDnaRecorder-JavaScript/typingdna.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/util/TypingUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/primary-auth/PrimaryAuthForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/Footer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/FooterRegistration.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/PrimaryAuthController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/IDPDiscovery.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/idp-discovery/IDPDiscoveryForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/IDPDiscoveryController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/ForceIDPDiscoveryController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-factors/ManualSetupPushFooter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/ManualSetupPushController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/enroll-factors/ManualSetupFooter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/ManualSetupTotpController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/factor-verify/EmailMagicLinkForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/InlineTOTPForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/PassCodeForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/PasswordForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/NumberChallengeView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/PushForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/SecurityQuestionForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/SendEmailAndVerifyCodeForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/TOTPForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/YubikeyForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/FooterSignout.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/FooterMFA.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/MfaVerifyController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/PasswordRequirements.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/PasswordExpiredController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/PasswordResetController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/PollController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/PwdResetEmailSentController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/RecoveryChallengeController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/RecoveryLoadingController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/RecoveryQuestionController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/RefreshAuthStateController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/RegistrationCompleteController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/LoginModel.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/RegistrationSchema.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/registration/SubSchema.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/RegistrationController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/UnlockAccountController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/UnlockEmailSentController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/VerifyCustomFactorController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/VerifyDuoController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/VerifyPIVController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/VerifyU2FController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/VerifyWebauthnController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/VerifyWindowsHelloController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/FooterWithBackLinkOnError.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/controllers/ErrorStateController.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/models/AppState.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/IDP.js","webpack:///./node_modules/@okta/okta-signin-widget/src/models/Settings.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/AuthContainer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/Animations.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/LoadingBeacon.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/Header.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/SecurityBeacon.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/ColorsUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/LanguageUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/BaseLoginRouter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/dropdown/FactorsDropDownOptions.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/mfa-verify/dropdown/FactorsDropDown.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/FactorBeacon.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/views/shared/PIVBeacon.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v1/LoginRouter.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/RemediationConstants.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/ui-schema/ion-object-handler.js","webpack:///./node_modules/@okta/okta-signin-widget/src/util/Hooks.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/mixins/mixins.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/models/AppState.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/sessionStorageHelper.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/constants.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/startLoginFlow.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/emailVerifyCallback.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/responseTransformer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/utils/TimeZone.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/ui-schema/ion-string-handler.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/uiSchemaTransformer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/ui-schema/ion-boolean-handler.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/utils/AuthenticatorUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/enroll-profile/i18nBaseAttributeMappings.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/i18nTransformer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/updateAppState.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/interactionCodeFlow.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/transformIdxResponse.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/formatError.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/IonResponseHelper.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/BaseLoginRouter.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/client/handleConfiguredFlow.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/BaseHeader.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/Link.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/ToggleTextLink.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/utils/LinksUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/BaseFooter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/SkipOptionalEnrollmentButton.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/utils/Constants.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/AuthenticatorEnrollOptions.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/AuthenticatorVerifyOptions.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/captcha/CaptchaView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/FormInputFactory.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/BaseForm.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/polling.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/BaseFormWithPolling.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/BaseModel.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/ViewClassNamesFactory.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/BaseView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/utils/ChallengeViewUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/internals/BaseOktaVerifyChallengeView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/utils/DeviceFingerprinting.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/IdentifierFooter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/signin/SignInWithIdps.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/signin/CustomButtons.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/signin/SignInWithDeviceOption.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/signin/SignInWithWebAuthn.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/CustomAccessDeniedErrorMessage.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/IdentifierView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/RedirectIdPView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/IdentifyRecoveryView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/AuthenticatorFooter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/HeaderBeacon.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/BaseAuthenticatorView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/EmailAuthenticatorHeader.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/EmailMagicLinkOTPTerminalView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/end-user-remediation/EndUserRemediationTerminalMessage.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/TerminalView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/AutoRedirectView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/utils/AutoRedirectUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/PollView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/AdminConsentViewHeader.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/ConsentViewForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/AdminConsentView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/EnduserConsentViewFooter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/EnduserConsentViewHeader.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/EnduserConsentAgreementText.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/EnduserConsentView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/ScopeCheckBox.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/GranularConsentView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/consent/EnduserEmailConsentView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/OktaVerifyAuthenticatorHeader.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/device/DeviceChallengePollView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/device/SSOExtensionView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/device/SignInDeviceView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/OdaOktaVerifyTerminalView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/MdmOktaVerifyTerminalView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/device/DeviceEnrollmentTerminalView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/password/PasswordPolicyUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/EnrollProfileView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/EnrollProfileUpdateView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/activation/RequestActivationEmailView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/SelectAuthenticatorEnrollView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/SelectAuthenticatorVerifyView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/authenticator/SelectAuthenticatorUnlockAccountView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/password/EnrollAuthenticatorPasswordView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/password/ChallengeAuthenticatorPasswordView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/password/ReEnrollAuthenticatorPasswordView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/password/ReEnrollAuthenticatorWarningPasswordView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/password/ResetAuthenticatorPasswordView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/BaseResendView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/phone/ChallengeAuthenticatorPhoneView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/phone/EnrollAuthenticatorPhoneView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/phone/EnrollAuthenticatorDataPhoneView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/phone/ChallengeAuthenticatorDataPhoneView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/security-question/EnrollAuthenticatorSecurityQuestionView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/security-question/ChallengeAuthenticatorSecurityQuestion.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/webauthn/EnrollWebauthnInfoView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/webauthn/EnrollWebauthnView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/webauthn/ChallengeWebauthnInfoView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/components/ChallengeWebauthnFooter.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/webauthn/EnrollWebAuthnResidentkeyLinkView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/webauthn/ChallengeWebauthnView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/email.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/email/BaseAuthenticatorEmailView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/email/AuthenticatorEmailViewUtil.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/email/EnrollAuthenticatorEmailView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/email/ChallengeAuthenticatorEmailView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/email/ChallengeAuthenticatorDataEmailView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/OVResendView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/SwitchEnrollChannelLinkView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/EnrollChannelPollDescriptionView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/EnrollPollOktaVerifyView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/SelectEnrollmentChannelOktaVerifyView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/EnrollementChannelDataOktaVerifyView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/ChallengePushView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/ChallengeOktaVerifyFastPassView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/ResendNumberChallengeView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/NumberChallengePhoneView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/NumberChallengePushView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/ChallengeOktaVerifyView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/ChallengeOktaVerifyTotpView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/ChallengeOktaVerifyResendPushView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/ChallengeOktaVerifyCustomAppPushOnlyFormView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/ChallengeOktaVerifyCustomAppFormView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/shared/ChallengeOktaVerifyCustomAppDataView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/ov/ChallengeOktaVerifySSOExtensionView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/google-authenticator/EnrollGoogleAuthenticatorBarcodeView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/google-authenticator/EnrollAuthenticatorManualSetupView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/google-authenticator/EnrollAuthenticatorGoogleAuthenticatorView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/google-authenticator/ChallengeGoogleAuthenticatorView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/on-prem/EnrollAuthenticatorOnPremView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/on-prem/ChallengeAuthenticatorOnPremView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/duo/BaseDuoAuthenticatorForm.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/duo/EnrollDuoAuthenticatorView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/duo/ChallengeDuoAuthenticatorView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/idp/BaseIdpAuthenticator.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/idp/AuthenticatorIdPVerifyView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/idp/AuthenticatorIdPEnrollView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/custom-otp/ChallengeCustomOTPAuthenticatorView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/symantec/AuthenticatorSymantecView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/device/DeviceCodeActivateView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/piv/PIVHeader.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/piv/ChallengePIVView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/yubikey/AuthenticatorYubiKeyView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/custom-app/ChallengeCustomAppResendPushView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/custom-password/ReEnrollCustomPasswordExpiryView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/views/custom-password/ReEnrollCustomPasswordExpiryWarningView.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/view-builder/ViewFactory.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/ion/payloadTransformer.js","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/controllers/FormController.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/v2/WidgetRouter.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/router/default.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/widget/buildRenderOptions.js","webpack:///./node_modules/@okta/okta-signin-widget/src/models/Hooks.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/widget/OktaSignIn.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/exports/default.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/widget/getAuthClient.ts","webpack:///./node_modules/@okta/okta-signin-widget/src/widget/createRouter.js","webpack:///./node_modules/@sindresorhus/to-milliseconds/index.js","webpack:///./node_modules/clipboard/lib/clipboard-action.js","webpack:///./node_modules/clipboard/lib/clipboard.js","webpack:///./node_modules/clipboard/node_modules/tiny-emitter/index.js","webpack:///./node_modules/cross-fetch/dist/browser-ponyfill.js","webpack:///./node_modules/delegate/src/closest.js","webpack:///./node_modules/delegate/src/delegate.js","webpack:///./node_modules/good-listener/src/is.js","webpack:///./node_modules/good-listener/src/listen.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/parse-ms/index.js","webpack:///./node_modules/q/q.js","webpack:///./node_modules/select/src/select.js","webpack:///./node_modules/u2f-api-polyfill/u2f-api-polyfill.js"],"sourcesContent":["// OIE supports only IDX pipeline\nimport {\n  createOktaAuthOAuth,\n  mixinIdx,\n  IdxTransactionMeta,\n  IdxStorageManagerInterface,\n  createIdxStorageManager,\n  createIdxOptionsConstructor,\n  OktaAuthIdxOptions,\n  IdxTransactionManagerInterface,\n  createIdxTransactionManager\n} from '@okta/okta-auth-js';\n\n// okta-auth-js supports a mixin pattern that allows us to compose a custom version containing only the code we need\n// build an AuthJS client that supports only the OIE engine\n\ntype M = IdxTransactionMeta;\ntype S = IdxStorageManagerInterface<M>;\ntype O = OktaAuthIdxOptions;\ntype TM = IdxTransactionManagerInterface;\n\nconst OptionsConstructor = createIdxOptionsConstructor();\nconst StorageManager = createIdxStorageManager<M>();\nconst IdxTransactionManager = createIdxTransactionManager();\n\n// Start with OAuth as base\nconst OktaAuthOAuth = createOktaAuthOAuth<M, S, O, TM>(StorageManager, OptionsConstructor, IdxTransactionManager);\n\n// Mixin IDX support\nconst OktaAuth = mixinIdx(OktaAuthOAuth);\n\nexport { OktaAuth };\n","// Default supports both Authn and IDX pipelines\nimport { mixinAuthn } from '@okta/okta-auth-js';\nimport { OktaAuth as OktaAuthIdx } from './oie';\n\n// okta-auth-js supports a mixin pattern that allows us to compose a custom version containing only the code we need\n// build an AuthJS client that supports both the Classic and OIE engines\n\n// Simply add Authn support to the IDX client\nconst OktaAuth = mixinAuthn(OktaAuthIdx);\n\nexport { OktaAuth };\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport { commonjsGlobal, getDefaultExportFromCjs };\n","var handlebars_runtime = {exports: {}};\n\nexport { handlebars_runtime as h };\n","var base = {};\n\nexport { base as __exports };\n","var utils = {};\n\nexport { utils as __exports };\n","import { __exports as utils } from '../../../../../_virtual/utils.js';\nexport { __exports as default } from '../../../../../_virtual/utils.js';\n\nutils.__esModule = true;\nutils.extend = extend;\nutils.indexOf = indexOf;\nutils.escapeExpression = escapeExpression;\nutils.isEmpty = isEmpty;\nutils.createFrame = createFrame;\nutils.blockParams = blockParams;\nutils.appendContextPath = appendContextPath;\nvar escape = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\nvar badChars = /[&<>\"'`=]/g,\n    possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n  return escape[chr];\n}\n\nfunction extend(obj\n/* , ...source */\n) {\n  for (var i = 1; i < arguments.length; i++) {\n    for (var key in arguments[i]) {\n      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n        obj[key] = arguments[i][key];\n      }\n    }\n  }\n\n  return obj;\n}\n\nvar toString = Object.prototype.toString;\nutils.toString = toString; // Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n\n/* eslint-disable func-style */\n\nvar isFunction = function isFunction(value) {\n  return typeof value === 'function';\n}; // fallback for older versions of Chrome and Safari\n\n/* istanbul ignore next */\n\n\nif (isFunction(/x/)) {\n  utils.isFunction = isFunction = function (value) {\n    return typeof value === 'function' && toString.call(value) === '[object Function]';\n  };\n}\n\nutils.isFunction = isFunction;\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\n\nvar isArray = Array.isArray || function (value) {\n  return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nutils.isArray = isArray; // Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n  for (var i = 0, len = array.length; i < len; i++) {\n    if (array[i] === value) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\nfunction escapeExpression(string) {\n  if (typeof string !== 'string') {\n    // don't escape SafeStrings, since they're already safe\n    if (string && string.toHTML) {\n      return string.toHTML();\n    } else if (string == null) {\n      return '';\n    } else if (!string) {\n      return string + '';\n    } // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n\n\n    string = '' + string;\n  }\n\n  if (!possible.test(string)) {\n    return string;\n  }\n\n  return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n  if (!value && value !== 0) {\n    return true;\n  } else if (isArray(value) && value.length === 0) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction createFrame(object) {\n  var frame = extend({}, object);\n  frame._parent = object;\n  return frame;\n}\n\nfunction blockParams(params, ids) {\n  params.path = ids;\n  return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n  return (contextPath ? contextPath + '.' : '') + id;\n}\n","var exception = {exports: {}};\n\nexport { exception as e };\n","import { e as exception } from '../../../../../_virtual/exception.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n  var loc = node && node.loc,\n      line = undefined,\n      endLineNumber = undefined,\n      column = undefined,\n      endColumn = undefined;\n\n  if (loc) {\n    line = loc.start.line;\n    endLineNumber = loc.end.line;\n    column = loc.start.column;\n    endColumn = loc.end.column;\n    message += ' - ' + line + ':' + column;\n  }\n\n  var tmp = Error.prototype.constructor.call(this, message); // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n\n  for (var idx = 0; idx < errorProps.length; idx++) {\n    this[errorProps[idx]] = tmp[errorProps[idx]];\n  }\n  /* istanbul ignore else */\n\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, Exception);\n  }\n\n  try {\n    if (loc) {\n      this.lineNumber = line;\n      this.endLineNumber = endLineNumber; // Work around issue under safari where we can't directly set the column value\n\n      /* istanbul ignore next */\n\n      if (Object.defineProperty) {\n        Object.defineProperty(this, 'column', {\n          value: column,\n          enumerable: true\n        });\n        Object.defineProperty(this, 'endColumn', {\n          value: endColumn,\n          enumerable: true\n        });\n      } else {\n        this.column = column;\n        this.endColumn = endColumn;\n      }\n    }\n  } catch (nop) {\n    /* Ignore if the browser is very particular */\n  }\n}\n\nException.prototype = new Error();\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n}(exception, exception.exports));\n","var helpers = {};\n\nexport { helpers as __exports };\n","var blockHelperMissing = {exports: {}};\n\nexport { blockHelperMissing as b };\n","import { b as blockHelperMissing } from '../../../../../../_virtual/block-helper-missing.js';\nimport '../utils.js';\nimport { __exports as utils } from '../../../../../../_virtual/utils.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\n\nvar _utils = utils;\n\nexports['default'] = function (instance) {\n  instance.registerHelper('blockHelperMissing', function (context, options) {\n    var inverse = options.inverse,\n        fn = options.fn;\n\n    if (context === true) {\n      return fn(this);\n    } else if (context === false || context == null) {\n      return inverse(this);\n    } else if (_utils.isArray(context)) {\n      if (context.length > 0) {\n        if (options.ids) {\n          options.ids = [options.name];\n        }\n\n        return instance.helpers.each(context, options);\n      } else {\n        return inverse(this);\n      }\n    } else {\n      if (options.data && options.ids) {\n        var data = _utils.createFrame(options.data);\n\n        data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n        options = {\n          data: data\n        };\n      }\n\n      return fn(context, options);\n    }\n  });\n};\n\nmodule.exports = exports['default'];\n}(blockHelperMissing, blockHelperMissing.exports));\n","var each = {exports: {}};\n\nexport { each as e };\n","import { commonjsGlobal } from '../../../../../../_virtual/_commonjsHelpers.js';\nimport { e as each } from '../../../../../../_virtual/each.js';\nimport '../utils.js';\nimport '../exception.js';\nimport { __exports as utils } from '../../../../../../_virtual/utils.js';\nimport { e as exception } from '../../../../../../_virtual/exception.js';\n\n(function (module, exports) {\n\nexports.__esModule = true; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _utils = utils;\n\nvar _exception = exception.exports;\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('each', function (context, options) {\n    if (!options) {\n      throw new _exception2['default']('Must pass iterator to #each');\n    }\n\n    var fn = options.fn,\n        inverse = options.inverse,\n        i = 0,\n        ret = '',\n        data = undefined,\n        contextPath = undefined;\n\n    if (options.data && options.ids) {\n      contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n    }\n\n    if (_utils.isFunction(context)) {\n      context = context.call(this);\n    }\n\n    if (options.data) {\n      data = _utils.createFrame(options.data);\n    }\n\n    function execIteration(field, index, last) {\n      if (data) {\n        data.key = field;\n        data.index = index;\n        data.first = index === 0;\n        data.last = !!last;\n\n        if (contextPath) {\n          data.contextPath = contextPath + field;\n        }\n      }\n\n      ret = ret + fn(context[field], {\n        data: data,\n        blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n      });\n    }\n\n    if (context && typeof context === 'object') {\n      if (_utils.isArray(context)) {\n        for (var j = context.length; i < j; i++) {\n          if (i in context) {\n            execIteration(i, i, i === context.length - 1);\n          }\n        }\n      } else if (commonjsGlobal.Symbol && context[commonjsGlobal.Symbol.iterator]) {\n        var newContext = [];\n        var iterator = context[commonjsGlobal.Symbol.iterator]();\n\n        for (var it = iterator.next(); !it.done; it = iterator.next()) {\n          newContext.push(it.value);\n        }\n\n        context = newContext;\n\n        for (var j = context.length; i < j; i++) {\n          execIteration(i, i, i === context.length - 1);\n        }\n      } else {\n        (function () {\n          var priorKey = undefined;\n          Object.keys(context).forEach(function (key) {\n            // We're running the iterations one step out of sync so we can detect\n            // the last iteration without have to scan the object twice and create\n            // an itermediate keys array.\n            if (priorKey !== undefined) {\n              execIteration(priorKey, i - 1);\n            }\n\n            priorKey = key;\n            i++;\n          });\n\n          if (priorKey !== undefined) {\n            execIteration(priorKey, i - 1, true);\n          }\n        })();\n      }\n    }\n\n    if (i === 0) {\n      ret = inverse(this);\n    }\n\n    return ret;\n  });\n};\n\nmodule.exports = exports['default'];\n}(each, each.exports));\n","var helperMissing = {exports: {}};\n\nexport { helperMissing as h };\n","import { h as helperMissing } from '../../../../../../_virtual/helper-missing.js';\nimport '../exception.js';\nimport { e as exception } from '../../../../../../_virtual/exception.js';\n\n(function (module, exports) {\n\nexports.__esModule = true; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _exception = exception.exports;\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('helperMissing', function ()\n  /* [args, ]options */\n  {\n    if (arguments.length === 1) {\n      // A missing field in a {{foo}} construct.\n      return undefined;\n    } else {\n      // Someone is actually trying to call something, blow up.\n      throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n    }\n  });\n};\n\nmodule.exports = exports['default'];\n}(helperMissing, helperMissing.exports));\n","var _if = {exports: {}};\n\nexport { _if as _ };\n","import { _ as _if } from '../../../../../../_virtual/if.js';\nimport '../utils.js';\nimport '../exception.js';\nimport { __exports as utils } from '../../../../../../_virtual/utils.js';\nimport { e as exception } from '../../../../../../_virtual/exception.js';\n\n(function (module, exports) {\n\nexports.__esModule = true; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _utils = utils;\n\nvar _exception = exception.exports;\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('if', function (conditional, options) {\n    if (arguments.length != 2) {\n      throw new _exception2['default']('#if requires exactly one argument');\n    }\n\n    if (_utils.isFunction(conditional)) {\n      conditional = conditional.call(this);\n    } // Default behavior is to render the positive path if the value is truthy and not empty.\n    // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n\n\n    if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n      return options.inverse(this);\n    } else {\n      return options.fn(this);\n    }\n  });\n  instance.registerHelper('unless', function (conditional, options) {\n    if (arguments.length != 2) {\n      throw new _exception2['default']('#unless requires exactly one argument');\n    }\n\n    return instance.helpers['if'].call(this, conditional, {\n      fn: options.inverse,\n      inverse: options.fn,\n      hash: options.hash\n    });\n  });\n};\n\nmodule.exports = exports['default'];\n}(_if, _if.exports));\n","var log = {exports: {}};\n\nexport { log as l };\n","import { l as log } from '../../../../../../_virtual/log.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n  instance.registerHelper('log', function ()\n  /* message, options */\n  {\n    var args = [undefined],\n        options = arguments[arguments.length - 1];\n\n    for (var i = 0; i < arguments.length - 1; i++) {\n      args.push(arguments[i]);\n    }\n\n    var level = 1;\n\n    if (options.hash.level != null) {\n      level = options.hash.level;\n    } else if (options.data && options.data.level != null) {\n      level = options.data.level;\n    }\n\n    args[0] = level;\n    instance.log.apply(instance, args);\n  });\n};\n\nmodule.exports = exports['default'];\n}(log, log.exports));\n","var lookup = {exports: {}};\n\nexport { lookup as l };\n","import { l as lookup } from '../../../../../../_virtual/lookup.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n  instance.registerHelper('lookup', function (obj, field, options) {\n    if (!obj) {\n      // Note for 5.0: Change to \"obj == null\" in 5.0\n      return obj;\n    }\n\n    return options.lookupProperty(obj, field);\n  });\n};\n\nmodule.exports = exports['default'];\n}(lookup, lookup.exports));\n","var _with = {exports: {}};\n\nexport { _with as _ };\n","import { __exports as helpers } from '../../../../../_virtual/helpers.js';\nexport { __exports as default } from '../../../../../_virtual/helpers.js';\nimport './helpers/block-helper-missing.js';\nimport './helpers/each.js';\nimport './helpers/helper-missing.js';\nimport './helpers/if.js';\nimport './helpers/log.js';\nimport './helpers/lookup.js';\nimport './helpers/with.js';\nimport { e as each } from '../../../../../_virtual/each.js';\nimport { h as helperMissing } from '../../../../../_virtual/helper-missing.js';\nimport { _ as _if } from '../../../../../_virtual/if.js';\nimport { l as log } from '../../../../../_virtual/log.js';\nimport { l as lookup } from '../../../../../_virtual/lookup.js';\nimport { _ as _with } from '../../../../../_virtual/with.js';\nimport { b as blockHelperMissing } from '../../../../../_virtual/block-helper-missing.js';\n\nhelpers.__esModule = true;\nhelpers.registerDefaultHelpers = registerDefaultHelpers;\nhelpers.moveHelperToHooks = moveHelperToHooks; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _helpersBlockHelperMissing = blockHelperMissing.exports;\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = each.exports;\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = helperMissing.exports;\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = _if.exports;\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = log.exports;\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = lookup.exports;\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = _with.exports;\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n  _helpersBlockHelperMissing2['default'](instance);\n\n  _helpersEach2['default'](instance);\n\n  _helpersHelperMissing2['default'](instance);\n\n  _helpersIf2['default'](instance);\n\n  _helpersLog2['default'](instance);\n\n  _helpersLookup2['default'](instance);\n\n  _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n  if (instance.helpers[helperName]) {\n    instance.hooks[helperName] = instance.helpers[helperName];\n\n    if (!keepHelper) {\n      delete instance.helpers[helperName];\n    }\n  }\n}\n","import { _ as _with } from '../../../../../../_virtual/with.js';\nimport '../utils.js';\nimport '../exception.js';\nimport { __exports as utils } from '../../../../../../_virtual/utils.js';\nimport { e as exception } from '../../../../../../_virtual/exception.js';\n\n(function (module, exports) {\n\nexports.__esModule = true; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _utils = utils;\n\nvar _exception = exception.exports;\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('with', function (context, options) {\n    if (arguments.length != 2) {\n      throw new _exception2['default']('#with requires exactly one argument');\n    }\n\n    if (_utils.isFunction(context)) {\n      context = context.call(this);\n    }\n\n    var fn = options.fn;\n\n    if (!_utils.isEmpty(context)) {\n      var data = options.data;\n\n      if (options.data && options.ids) {\n        data = _utils.createFrame(options.data);\n        data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n      }\n\n      return fn(context, {\n        data: data,\n        blockParams: _utils.blockParams([context], [data && data.contextPath])\n      });\n    } else {\n      return options.inverse(this);\n    }\n  });\n};\n\nmodule.exports = exports['default'];\n}(_with, _with.exports));\n","var decorators = {};\n\nexport { decorators as __exports };\n","var inline = {exports: {}};\n\nexport { inline as i };\n","import { i as inline } from '../../../../../../_virtual/inline.js';\nimport '../utils.js';\nimport { __exports as utils } from '../../../../../../_virtual/utils.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\n\nvar _utils = utils;\n\nexports['default'] = function (instance) {\n  instance.registerDecorator('inline', function (fn, props, container, options) {\n    var ret = fn;\n\n    if (!props.partials) {\n      props.partials = {};\n\n      ret = function (context, options) {\n        // Create a new partials stack frame prior to exec.\n        var original = container.partials;\n        container.partials = _utils.extend({}, original, props.partials);\n        var ret = fn(context, options);\n        container.partials = original;\n        return ret;\n      };\n    }\n\n    props.partials[options.args[0]] = options.fn;\n    return ret;\n  });\n};\n\nmodule.exports = exports['default'];\n}(inline, inline.exports));\n","import { __exports as decorators } from '../../../../../_virtual/decorators.js';\nexport { __exports as default } from '../../../../../_virtual/decorators.js';\nimport './decorators/inline.js';\nimport { i as inline } from '../../../../../_virtual/inline.js';\n\ndecorators.__esModule = true;\ndecorators.registerDefaultDecorators = registerDefaultDecorators; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _decoratorsInline = inline.exports;\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n  _decoratorsInline2['default'](instance);\n}\n","var logger = {exports: {}};\n\nexport { logger as l };\n","import { l as logger } from '../../../../../_virtual/logger.js';\nimport './utils.js';\nimport { __exports as utils } from '../../../../../_virtual/utils.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\n\nvar _utils = utils;\n\nvar logger = {\n  methodMap: ['debug', 'info', 'warn', 'error'],\n  level: 'info',\n  // Maps a given level value to the `methodMap` indexes above.\n  lookupLevel: function lookupLevel(level) {\n    if (typeof level === 'string') {\n      var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n\n      if (levelMap >= 0) {\n        level = levelMap;\n      } else {\n        level = parseInt(level, 10);\n      }\n    }\n\n    return level;\n  },\n  // Can be overridden in the host environment\n  log: function log(level) {\n    level = logger.lookupLevel(level);\n\n    if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n      var method = logger.methodMap[level]; // eslint-disable-next-line no-console\n\n      if (!console[method]) {\n        method = 'log';\n      }\n\n      for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        message[_key - 1] = arguments[_key];\n      }\n\n      console[method].apply(console, message); // eslint-disable-line no-console\n    }\n  }\n};\nexports['default'] = logger;\nmodule.exports = exports['default'];\n}(logger, logger.exports));\n","var protoAccess = {};\n\nexport { protoAccess as __exports };\n","var createNewLookupObject = {};\n\nexport { createNewLookupObject as __exports };\n","import { __exports as createNewLookupObject$1 } from '../../../../../../_virtual/create-new-lookup-object.js';\nexport { __exports as default } from '../../../../../../_virtual/create-new-lookup-object.js';\nimport '../utils.js';\nimport { __exports as utils } from '../../../../../../_virtual/utils.js';\n\ncreateNewLookupObject$1.__esModule = true;\ncreateNewLookupObject$1.createNewLookupObject = createNewLookupObject;\n\nvar _utils = utils;\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\n\nfunction createNewLookupObject() {\n  for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n    sources[_key] = arguments[_key];\n  }\n\n  return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n","import { __exports as protoAccess } from '../../../../../../_virtual/proto-access.js';\nexport { __exports as default } from '../../../../../../_virtual/proto-access.js';\nimport './create-new-lookup-object.js';\nimport '../logger.js';\nimport { __exports as createNewLookupObject } from '../../../../../../_virtual/create-new-lookup-object.js';\nimport { l as logger$1 } from '../../../../../../_virtual/logger.js';\n\nprotoAccess.__esModule = true;\nprotoAccess.createProtoAccessControl = createProtoAccessControl;\nprotoAccess.resultIsAllowed = resultIsAllowed;\nprotoAccess.resetLoggedProperties = resetLoggedProperties; // istanbul ignore next\n\nfunction _interopRequireWildcard(obj) {\n  if (obj && obj.__esModule) {\n    return obj;\n  } else {\n    var newObj = {};\n\n    if (obj != null) {\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n      }\n    }\n\n    newObj['default'] = obj;\n    return newObj;\n  }\n}\n\nvar _createNewLookupObject = createNewLookupObject;\n\nvar _logger = logger$1.exports;\n\nvar logger = _interopRequireWildcard(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n  var defaultMethodWhiteList = Object.create(null);\n  defaultMethodWhiteList['constructor'] = false;\n  defaultMethodWhiteList['__defineGetter__'] = false;\n  defaultMethodWhiteList['__defineSetter__'] = false;\n  defaultMethodWhiteList['__lookupGetter__'] = false;\n  var defaultPropertyWhiteList = Object.create(null); // eslint-disable-next-line no-proto\n\n  defaultPropertyWhiteList['__proto__'] = false;\n  return {\n    properties: {\n      whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n      defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n    },\n    methods: {\n      whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n      defaultValue: runtimeOptions.allowProtoMethodsByDefault\n    }\n  };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n  if (typeof result === 'function') {\n    return checkWhiteList(protoAccessControl.methods, propertyName);\n  } else {\n    return checkWhiteList(protoAccessControl.properties, propertyName);\n  }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n  if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n    return protoAccessControlForType.whitelist[propertyName] === true;\n  }\n\n  if (protoAccessControlForType.defaultValue !== undefined) {\n    return protoAccessControlForType.defaultValue;\n  }\n\n  logUnexpecedPropertyAccessOnce(propertyName);\n  return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n  if (loggedProperties[propertyName] !== true) {\n    loggedProperties[propertyName] = true;\n    logger.log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n  }\n}\n\nfunction resetLoggedProperties() {\n  Object.keys(loggedProperties).forEach(function (propertyName) {\n    delete loggedProperties[propertyName];\n  });\n}\n","import { __exports as base } from '../../../../../_virtual/base.js';\nexport { __exports as default } from '../../../../../_virtual/base.js';\nimport './utils.js';\nimport './exception.js';\nimport './helpers.js';\nimport './decorators.js';\nimport './logger.js';\nimport './internal/proto-access.js';\nimport { __exports as utils } from '../../../../../_virtual/utils.js';\nimport { __exports as protoAccess } from '../../../../../_virtual/proto-access.js';\nimport { __exports as helpers } from '../../../../../_virtual/helpers.js';\nimport { __exports as decorators } from '../../../../../_virtual/decorators.js';\nimport { l as logger } from '../../../../../_virtual/logger.js';\nimport { e as exception } from '../../../../../_virtual/exception.js';\n\nbase.__esModule = true;\nbase.HandlebarsEnvironment = HandlebarsEnvironment; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _utils = utils;\n\nvar _exception = exception.exports;\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = helpers;\n\nvar _decorators = decorators;\n\nvar _logger = logger.exports;\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = protoAccess;\n\nvar VERSION = '4.7.7';\nbase.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nbase.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\nbase.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n  1: '<= 1.0.rc.2',\n  // 1.0.rc.2 is actually rev2 but doesn't report it\n  2: '== 1.0.0-rc.3',\n  3: '== 1.0.0-rc.4',\n  4: '== 1.x.x',\n  5: '== 2.0.0-alpha.x',\n  6: '>= 2.0.0-beta.1',\n  7: '>= 4.0.0 <4.3.0',\n  8: '>= 4.3.0'\n};\nbase.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n  this.helpers = helpers || {};\n  this.partials = partials || {};\n  this.decorators = decorators || {};\n\n  _helpers.registerDefaultHelpers(this);\n\n  _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n  constructor: HandlebarsEnvironment,\n  logger: _logger2['default'],\n  log: _logger2['default'].log,\n  registerHelper: function registerHelper(name, fn) {\n    if (_utils.toString.call(name) === objectType) {\n      if (fn) {\n        throw new _exception2['default']('Arg not supported with multiple helpers');\n      }\n\n      _utils.extend(this.helpers, name);\n    } else {\n      this.helpers[name] = fn;\n    }\n  },\n  unregisterHelper: function unregisterHelper(name) {\n    delete this.helpers[name];\n  },\n  registerPartial: function registerPartial(name, partial) {\n    if (_utils.toString.call(name) === objectType) {\n      _utils.extend(this.partials, name);\n    } else {\n      if (typeof partial === 'undefined') {\n        throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n      }\n\n      this.partials[name] = partial;\n    }\n  },\n  unregisterPartial: function unregisterPartial(name) {\n    delete this.partials[name];\n  },\n  registerDecorator: function registerDecorator(name, fn) {\n    if (_utils.toString.call(name) === objectType) {\n      if (fn) {\n        throw new _exception2['default']('Arg not supported with multiple decorators');\n      }\n\n      _utils.extend(this.decorators, name);\n    } else {\n      this.decorators[name] = fn;\n    }\n  },\n  unregisterDecorator: function unregisterDecorator(name) {\n    delete this.decorators[name];\n  },\n\n  /**\n   * Reset the memory of illegal property accesses that have already been logged.\n   * @deprecated should only be used in handlebars test-cases\n   */\n  resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n    _internalProtoAccess.resetLoggedProperties();\n  }\n};\nvar log = _logger2['default'].log;\nbase.log = log;\nbase.createFrame = _utils.createFrame;\nbase.logger = _logger2['default'];\n","var safeString = {exports: {}};\n\nexport { safeString as s };\n","import { s as safeString } from '../../../../../_virtual/safe-string.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\n\nfunction SafeString(string) {\n  this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n  return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n}(safeString, safeString.exports));\n","var runtime = {};\n\nexport { runtime as __exports };\n","var wrapHelper = {};\n\nexport { wrapHelper as __exports };\n","import { __exports as wrapHelper$1 } from '../../../../../../_virtual/wrapHelper.js';\nexport { __exports as default } from '../../../../../../_virtual/wrapHelper.js';\n\nwrapHelper$1.__esModule = true;\nwrapHelper$1.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n  if (typeof helper !== 'function') {\n    // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n    // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n    return helper;\n  }\n\n  var wrapper = function wrapper()\n  /* dynamic arguments */\n  {\n    var options = arguments[arguments.length - 1];\n    arguments[arguments.length - 1] = transformOptionsFn(options);\n    return helper.apply(this, arguments);\n  };\n\n  return wrapper;\n}\n","import { __exports as runtime } from '../../../../../_virtual/runtime.js';\nexport { __exports as default } from '../../../../../_virtual/runtime.js';\nimport './utils.js';\nimport './exception.js';\nimport './base.js';\nimport './helpers.js';\nimport './internal/wrapHelper.js';\nimport './internal/proto-access.js';\nimport { __exports as utils } from '../../../../../_virtual/utils.js';\nimport { __exports as base } from '../../../../../_virtual/base.js';\nimport { __exports as protoAccess } from '../../../../../_virtual/proto-access.js';\nimport { __exports as helpers } from '../../../../../_virtual/helpers.js';\nimport { __exports as wrapHelper } from '../../../../../_virtual/wrapHelper.js';\nimport { e as exception } from '../../../../../_virtual/exception.js';\n\nruntime.__esModule = true;\nruntime.checkRevision = checkRevision;\nruntime.template = template;\nruntime.wrapProgram = wrapProgram;\nruntime.resolvePartial = resolvePartial;\nruntime.invokePartial = invokePartial;\nruntime.noop = noop; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n} // istanbul ignore next\n\n\nfunction _interopRequireWildcard(obj) {\n  if (obj && obj.__esModule) {\n    return obj;\n  } else {\n    var newObj = {};\n\n    if (obj != null) {\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n      }\n    }\n\n    newObj['default'] = obj;\n    return newObj;\n  }\n}\n\nvar _utils = utils;\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = exception.exports;\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = base;\n\nvar _helpers = helpers;\n\nvar _internalWrapHelper = wrapHelper;\n\nvar _internalProtoAccess = protoAccess;\n\nfunction checkRevision(compilerInfo) {\n  var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n      currentRevision = _base.COMPILER_REVISION;\n\n  if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n    return;\n  }\n\n  if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n    var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n        compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n    throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n  } else {\n    // Use the embedded version info since the runtime doesn't know about this revision yet\n    throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n  }\n}\n\nfunction template(templateSpec, env) {\n  /* istanbul ignore next */\n  if (!env) {\n    throw new _exception2['default']('No environment passed to template');\n  }\n\n  if (!templateSpec || !templateSpec.main) {\n    throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n  }\n\n  templateSpec.main.decorator = templateSpec.main_d; // Note: Using env.VM references rather than local var references throughout this section to allow\n  // for external users to override these as pseudo-supported APIs.\n\n  env.VM.checkRevision(templateSpec.compiler); // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n\n  var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n  function invokePartialWrapper(partial, context, options) {\n    if (options.hash) {\n      context = Utils.extend({}, context, options.hash);\n\n      if (options.ids) {\n        options.ids[0] = true;\n      }\n    }\n\n    partial = env.VM.resolvePartial.call(this, partial, context, options);\n    var extendedOptions = Utils.extend({}, options, {\n      hooks: this.hooks,\n      protoAccessControl: this.protoAccessControl\n    });\n    var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n    if (result == null && env.compile) {\n      options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n      result = options.partials[options.name](context, extendedOptions);\n    }\n\n    if (result != null) {\n      if (options.indent) {\n        var lines = result.split('\\n');\n\n        for (var i = 0, l = lines.length; i < l; i++) {\n          if (!lines[i] && i + 1 === l) {\n            break;\n          }\n\n          lines[i] = options.indent + lines[i];\n        }\n\n        result = lines.join('\\n');\n      }\n\n      return result;\n    } else {\n      throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n    }\n  } // Just add water\n\n\n  var container = {\n    strict: function strict(obj, name, loc) {\n      if (!obj || !(name in obj)) {\n        throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n          loc: loc\n        });\n      }\n\n      return container.lookupProperty(obj, name);\n    },\n    lookupProperty: function lookupProperty(parent, propertyName) {\n      var result = parent[propertyName];\n\n      if (result == null) {\n        return result;\n      }\n\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return result;\n      }\n\n      if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n        return result;\n      }\n\n      return undefined;\n    },\n    lookup: function lookup(depths, name) {\n      var len = depths.length;\n\n      for (var i = 0; i < len; i++) {\n        var result = depths[i] && container.lookupProperty(depths[i], name);\n\n        if (result != null) {\n          return depths[i][name];\n        }\n      }\n    },\n    lambda: function lambda(current, context) {\n      return typeof current === 'function' ? current.call(context) : current;\n    },\n    escapeExpression: Utils.escapeExpression,\n    invokePartial: invokePartialWrapper,\n    fn: function fn(i) {\n      var ret = templateSpec[i];\n      ret.decorator = templateSpec[i + '_d'];\n      return ret;\n    },\n    programs: [],\n    program: function program(i, data, declaredBlockParams, blockParams, depths) {\n      var programWrapper = this.programs[i],\n          fn = this.fn(i);\n\n      if (data || depths || blockParams || declaredBlockParams) {\n        programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n      } else if (!programWrapper) {\n        programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n      }\n\n      return programWrapper;\n    },\n    data: function data(value, depth) {\n      while (value && depth--) {\n        value = value._parent;\n      }\n\n      return value;\n    },\n    mergeIfNeeded: function mergeIfNeeded(param, common) {\n      var obj = param || common;\n\n      if (param && common && param !== common) {\n        obj = Utils.extend({}, common, param);\n      }\n\n      return obj;\n    },\n    // An empty object to use as replacement for null-contexts\n    nullContext: Object.seal({}),\n    noop: env.VM.noop,\n    compilerInfo: templateSpec.compiler\n  };\n\n  function ret(context) {\n    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n    var data = options.data;\n\n    ret._setup(options);\n\n    if (!options.partial && templateSpec.useData) {\n      data = initData(context, data);\n    }\n\n    var depths = undefined,\n        blockParams = templateSpec.useBlockParams ? [] : undefined;\n\n    if (templateSpec.useDepths) {\n      if (options.depths) {\n        depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n      } else {\n        depths = [context];\n      }\n    }\n\n    function main(context\n    /*, options*/\n    ) {\n      return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n    }\n\n    main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n    return main(context, options);\n  }\n\n  ret.isTop = true;\n\n  ret._setup = function (options) {\n    if (!options.partial) {\n      var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n      wrapHelpersToPassLookupProperty(mergedHelpers, container);\n      container.helpers = mergedHelpers;\n\n      if (templateSpec.usePartial) {\n        // Use mergeIfNeeded here to prevent compiling global partials multiple times\n        container.partials = container.mergeIfNeeded(options.partials, env.partials);\n      }\n\n      if (templateSpec.usePartial || templateSpec.useDecorators) {\n        container.decorators = Utils.extend({}, env.decorators, options.decorators);\n      }\n\n      container.hooks = {};\n      container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n      var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n\n      _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n\n      _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n    } else {\n      container.protoAccessControl = options.protoAccessControl; // internal option\n\n      container.helpers = options.helpers;\n      container.partials = options.partials;\n      container.decorators = options.decorators;\n      container.hooks = options.hooks;\n    }\n  };\n\n  ret._child = function (i, data, blockParams, depths) {\n    if (templateSpec.useBlockParams && !blockParams) {\n      throw new _exception2['default']('must pass block params');\n    }\n\n    if (templateSpec.useDepths && !depths) {\n      throw new _exception2['default']('must pass parent depths');\n    }\n\n    return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n  };\n\n  return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n  function prog(context) {\n    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n    var currentDepths = depths;\n\n    if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n      currentDepths = [context].concat(depths);\n    }\n\n    return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n  }\n\n  prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n  prog.program = i;\n  prog.depth = depths ? depths.length : 0;\n  prog.blockParams = declaredBlockParams || 0;\n  return prog;\n}\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\n\nfunction resolvePartial(partial, context, options) {\n  if (!partial) {\n    if (options.name === '@partial-block') {\n      partial = options.data['partial-block'];\n    } else {\n      partial = options.partials[options.name];\n    }\n  } else if (!partial.call && !options.name) {\n    // This is a dynamic partial that returned a string\n    options.name = partial;\n    partial = options.partials[partial];\n  }\n\n  return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n  // Use the current closure context to save the partial-block if this partial\n  var currentPartialBlock = options.data && options.data['partial-block'];\n  options.partial = true;\n\n  if (options.ids) {\n    options.data.contextPath = options.ids[0] || options.data.contextPath;\n  }\n\n  var partialBlock = undefined;\n\n  if (options.fn && options.fn !== noop) {\n    (function () {\n      options.data = _base.createFrame(options.data); // Wrapper function to get access to currentPartialBlock from the closure\n\n      var fn = options.fn;\n\n      partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n        var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; // Restore the partial-block from the closure for the execution of the block\n        // i.e. the part inside the block of the partial call.\n\n        options.data = _base.createFrame(options.data);\n        options.data['partial-block'] = currentPartialBlock;\n        return fn(context, options);\n      };\n\n      if (fn.partials) {\n        options.partials = Utils.extend({}, options.partials, fn.partials);\n      }\n    })();\n  }\n\n  if (partial === undefined && partialBlock) {\n    partial = partialBlock;\n  }\n\n  if (partial === undefined) {\n    throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n  } else if (partial instanceof Function) {\n    return partial(context, options);\n  }\n}\n\nfunction noop() {\n  return '';\n}\n\nfunction initData(context, data) {\n  if (!data || !('root' in data)) {\n    data = data ? _base.createFrame(data) : {};\n    data.root = context;\n  }\n\n  return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n  if (fn.decorator) {\n    var props = {};\n    prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n    Utils.extend(prog, props);\n  }\n\n  return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n  Object.keys(mergedHelpers).forEach(function (helperName) {\n    var helper = mergedHelpers[helperName];\n    mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n  });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n  var lookupProperty = container.lookupProperty;\n  return _internalWrapHelper.wrapHelper(helper, function (options) {\n    return Utils.extend({\n      lookupProperty: lookupProperty\n    }, options);\n  });\n}\n","var noConflict = {exports: {}};\n\nexport { noConflict as n };\n","import { commonjsGlobal } from '../../../../../_virtual/_commonjsHelpers.js';\nimport { n as noConflict } from '../../../../../_virtual/no-conflict.js';\n\n(function (module, exports) {\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n  /* istanbul ignore next */\n  var root = typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : window,\n      $Handlebars = root.Handlebars;\n  /* istanbul ignore next */\n\n  Handlebars.noConflict = function () {\n    if (root.Handlebars === Handlebars) {\n      root.Handlebars = $Handlebars;\n    }\n\n    return Handlebars;\n  };\n};\n\nmodule.exports = exports['default'];\n}(noConflict, noConflict.exports));\n","import { getDefaultExportFromCjs } from '../../../../_virtual/_commonjsHelpers.js';\nimport { h as handlebars_runtime } from '../../../../_virtual/handlebars.runtime.js';\nimport './handlebars/base.js';\nimport './handlebars/safe-string.js';\nimport './handlebars/exception.js';\nimport './handlebars/utils.js';\nimport './handlebars/runtime.js';\nimport './handlebars/no-conflict.js';\nimport { __exports as base } from '../../../../_virtual/base.js';\nimport { __exports as utils } from '../../../../_virtual/utils.js';\nimport { __exports as runtime } from '../../../../_virtual/runtime.js';\nimport { e as exception } from '../../../../_virtual/exception.js';\nimport { n as noConflict } from '../../../../_virtual/no-conflict.js';\nimport { s as safeString } from '../../../../_virtual/safe-string.js';\n\n(function (module, exports) {\n\nexports.__esModule = true; // istanbul ignore next\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n} // istanbul ignore next\n\n\nfunction _interopRequireWildcard(obj) {\n  if (obj && obj.__esModule) {\n    return obj;\n  } else {\n    var newObj = {};\n\n    if (obj != null) {\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n      }\n    }\n\n    newObj['default'] = obj;\n    return newObj;\n  }\n}\n\nvar _handlebarsBase = base;\n\nvar base$1 = _interopRequireWildcard(_handlebarsBase); // Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\n\nvar _handlebarsSafeString = safeString.exports;\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = exception.exports;\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = utils;\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = runtime;\n\nvar runtime$1 = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = noConflict.exports;\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); // For compatibility and usage outside of module systems, make the Handlebars object a namespace\n\n\nfunction create() {\n  var hb = new base$1.HandlebarsEnvironment();\n  Utils.extend(hb, base$1);\n  hb.SafeString = _handlebarsSafeString2['default'];\n  hb.Exception = _handlebarsException2['default'];\n  hb.Utils = Utils;\n  hb.escapeExpression = Utils.escapeExpression;\n  hb.VM = runtime$1;\n\n  hb.template = function (spec) {\n    return runtime$1.template(spec, hb);\n  };\n\n  return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\nexports['default'] = inst;\nmodule.exports = exports['default'];\n}(handlebars_runtime, handlebars_runtime.exports));\n\nvar _Handlebars2 = /*@__PURE__*/getDefaultExportFromCjs(handlebars_runtime.exports);\n\nexport { _Handlebars2 as default };\n","var underscoreMin = {exports: {}};\n\nexport { underscoreMin as u };\n","import { commonjsGlobal } from '../../_virtual/_commonjsHelpers.js';\nimport { u as underscoreMin } from '../../_virtual/underscore-min.js';\n\n(function (module, exports) {\n!function (n, r) {\n  module.exports = r() ;\n}(commonjsGlobal, function () {\n  //     Underscore.js 1.13.1\n  //     https://underscorejs.org\n  //     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n  //     Underscore may be freely distributed under the MIT license.\n  var n = \"1.13.1\",\n      r = \"object\" == typeof self && self.self === self && self || \"object\" == typeof commonjsGlobal && commonjsGlobal.global === commonjsGlobal && commonjsGlobal || Function(\"return this\")() || {},\n      t = Array.prototype,\n      e = Object.prototype,\n      u = \"undefined\" != typeof Symbol ? Symbol.prototype : null,\n      o = t.push,\n      i = t.slice,\n      a = e.toString,\n      f = e.hasOwnProperty,\n      c = \"undefined\" != typeof ArrayBuffer,\n      l = \"undefined\" != typeof DataView,\n      s = Array.isArray,\n      p = Object.keys,\n      v = Object.create,\n      h = c && ArrayBuffer.isView,\n      y = isNaN,\n      d = isFinite,\n      g = !{\n    toString: null\n  }.propertyIsEnumerable(\"toString\"),\n      b = [\"valueOf\", \"isPrototypeOf\", \"toString\", \"propertyIsEnumerable\", \"hasOwnProperty\", \"toLocaleString\"],\n      m = Math.pow(2, 53) - 1;\n\n  function j(n, r) {\n    return r = null == r ? n.length - 1 : +r, function () {\n      for (var t = Math.max(arguments.length - r, 0), e = Array(t), u = 0; u < t; u++) e[u] = arguments[u + r];\n\n      switch (r) {\n        case 0:\n          return n.call(this, e);\n\n        case 1:\n          return n.call(this, arguments[0], e);\n\n        case 2:\n          return n.call(this, arguments[0], arguments[1], e);\n      }\n\n      var o = Array(r + 1);\n\n      for (u = 0; u < r; u++) o[u] = arguments[u];\n\n      return o[r] = e, n.apply(this, o);\n    };\n  }\n\n  function _(n) {\n    var r = typeof n;\n    return \"function\" === r || \"object\" === r && !!n;\n  }\n\n  function w(n) {\n    return void 0 === n;\n  }\n\n  function A(n) {\n    return !0 === n || !1 === n || \"[object Boolean]\" === a.call(n);\n  }\n\n  function x(n) {\n    var r = \"[object \" + n + \"]\";\n    return function (n) {\n      return a.call(n) === r;\n    };\n  }\n\n  var S = x(\"String\"),\n      O = x(\"Number\"),\n      M = x(\"Date\"),\n      E = x(\"RegExp\"),\n      B = x(\"Error\"),\n      N = x(\"Symbol\"),\n      I = x(\"ArrayBuffer\"),\n      T = x(\"Function\"),\n      k = r.document && r.document.childNodes;\n  \"function\" != typeof /./ && \"object\" != typeof Int8Array && \"function\" != typeof k && (T = function (n) {\n    return \"function\" == typeof n || !1;\n  });\n  var D = T,\n      R = x(\"Object\"),\n      F = l && R(new DataView(new ArrayBuffer(8))),\n      V = \"undefined\" != typeof Map && R(new Map()),\n      P = x(\"DataView\");\n  var q = F ? function (n) {\n    return null != n && D(n.getInt8) && I(n.buffer);\n  } : P,\n      U = s || x(\"Array\");\n\n  function W(n, r) {\n    return null != n && f.call(n, r);\n  }\n\n  var z = x(\"Arguments\");\n  !function () {\n    z(arguments) || (z = function (n) {\n      return W(n, \"callee\");\n    });\n  }();\n  var L = z;\n\n  function $(n) {\n    return O(n) && y(n);\n  }\n\n  function C(n) {\n    return function () {\n      return n;\n    };\n  }\n\n  function K(n) {\n    return function (r) {\n      var t = n(r);\n      return \"number\" == typeof t && t >= 0 && t <= m;\n    };\n  }\n\n  function J(n) {\n    return function (r) {\n      return null == r ? void 0 : r[n];\n    };\n  }\n\n  var G = J(\"byteLength\"),\n      H = K(G),\n      Q = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n  var X = c ? function (n) {\n    return h ? h(n) && !q(n) : H(n) && Q.test(a.call(n));\n  } : C(!1),\n      Y = J(\"length\");\n\n  function Z(n, r) {\n    r = function (n) {\n      for (var r = {}, t = n.length, e = 0; e < t; ++e) r[n[e]] = !0;\n\n      return {\n        contains: function (n) {\n          return r[n];\n        },\n        push: function (t) {\n          return r[t] = !0, n.push(t);\n        }\n      };\n    }(r);\n\n    var t = b.length,\n        u = n.constructor,\n        o = D(u) && u.prototype || e,\n        i = \"constructor\";\n\n    for (W(n, i) && !r.contains(i) && r.push(i); t--;) (i = b[t]) in n && n[i] !== o[i] && !r.contains(i) && r.push(i);\n  }\n\n  function nn(n) {\n    if (!_(n)) return [];\n    if (p) return p(n);\n    var r = [];\n\n    for (var t in n) W(n, t) && r.push(t);\n\n    return g && Z(n, r), r;\n  }\n\n  function rn(n, r) {\n    var t = nn(r),\n        e = t.length;\n    if (null == n) return !e;\n\n    for (var u = Object(n), o = 0; o < e; o++) {\n      var i = t[o];\n      if (r[i] !== u[i] || !(i in u)) return !1;\n    }\n\n    return !0;\n  }\n\n  function tn(n) {\n    return n instanceof tn ? n : this instanceof tn ? void (this._wrapped = n) : new tn(n);\n  }\n\n  function en(n) {\n    return new Uint8Array(n.buffer || n, n.byteOffset || 0, G(n));\n  }\n\n  tn.VERSION = n, tn.prototype.value = function () {\n    return this._wrapped;\n  }, tn.prototype.valueOf = tn.prototype.toJSON = tn.prototype.value, tn.prototype.toString = function () {\n    return String(this._wrapped);\n  };\n  var un = \"[object DataView]\";\n\n  function on(n, r, t, e) {\n    if (n === r) return 0 !== n || 1 / n == 1 / r;\n    if (null == n || null == r) return !1;\n    if (n != n) return r != r;\n    var o = typeof n;\n    return (\"function\" === o || \"object\" === o || \"object\" == typeof r) && function n(r, t, e, o) {\n      r instanceof tn && (r = r._wrapped);\n      t instanceof tn && (t = t._wrapped);\n      var i = a.call(r);\n      if (i !== a.call(t)) return !1;\n\n      if (F && \"[object Object]\" == i && q(r)) {\n        if (!q(t)) return !1;\n        i = un;\n      }\n\n      switch (i) {\n        case \"[object RegExp]\":\n        case \"[object String]\":\n          return \"\" + r == \"\" + t;\n\n        case \"[object Number]\":\n          return +r != +r ? +t != +t : 0 == +r ? 1 / +r == 1 / t : +r == +t;\n\n        case \"[object Date]\":\n        case \"[object Boolean]\":\n          return +r == +t;\n\n        case \"[object Symbol]\":\n          return u.valueOf.call(r) === u.valueOf.call(t);\n\n        case \"[object ArrayBuffer]\":\n        case un:\n          return n(en(r), en(t), e, o);\n      }\n\n      var f = \"[object Array]\" === i;\n\n      if (!f && X(r)) {\n        if (G(r) !== G(t)) return !1;\n        if (r.buffer === t.buffer && r.byteOffset === t.byteOffset) return !0;\n        f = !0;\n      }\n\n      if (!f) {\n        if (\"object\" != typeof r || \"object\" != typeof t) return !1;\n        var c = r.constructor,\n            l = t.constructor;\n        if (c !== l && !(D(c) && c instanceof c && D(l) && l instanceof l) && \"constructor\" in r && \"constructor\" in t) return !1;\n      }\n\n      o = o || [];\n      var s = (e = e || []).length;\n\n      for (; s--;) if (e[s] === r) return o[s] === t;\n\n      if (e.push(r), o.push(t), f) {\n        if ((s = r.length) !== t.length) return !1;\n\n        for (; s--;) if (!on(r[s], t[s], e, o)) return !1;\n      } else {\n        var p,\n            v = nn(r);\n        if (s = v.length, nn(t).length !== s) return !1;\n\n        for (; s--;) if (p = v[s], !W(t, p) || !on(r[p], t[p], e, o)) return !1;\n      }\n\n      return e.pop(), o.pop(), !0;\n    }(n, r, t, e);\n  }\n\n  function an(n) {\n    if (!_(n)) return [];\n    var r = [];\n\n    for (var t in n) r.push(t);\n\n    return g && Z(n, r), r;\n  }\n\n  function fn(n) {\n    var r = Y(n);\n    return function (t) {\n      if (null == t) return !1;\n      var e = an(t);\n      if (Y(e)) return !1;\n\n      for (var u = 0; u < r; u++) if (!D(t[n[u]])) return !1;\n\n      return n !== hn || !D(t[cn]);\n    };\n  }\n\n  var cn = \"forEach\",\n      ln = \"has\",\n      sn = [\"clear\", \"delete\"],\n      pn = [\"get\", ln, \"set\"],\n      vn = sn.concat(cn, pn),\n      hn = sn.concat(pn),\n      yn = [\"add\"].concat(sn, cn, ln),\n      dn = V ? fn(vn) : x(\"Map\"),\n      gn = V ? fn(hn) : x(\"WeakMap\"),\n      bn = V ? fn(yn) : x(\"Set\"),\n      mn = x(\"WeakSet\");\n\n  function jn(n) {\n    for (var r = nn(n), t = r.length, e = Array(t), u = 0; u < t; u++) e[u] = n[r[u]];\n\n    return e;\n  }\n\n  function _n(n) {\n    for (var r = {}, t = nn(n), e = 0, u = t.length; e < u; e++) r[n[t[e]]] = t[e];\n\n    return r;\n  }\n\n  function wn(n) {\n    var r = [];\n\n    for (var t in n) D(n[t]) && r.push(t);\n\n    return r.sort();\n  }\n\n  function An(n, r) {\n    return function (t) {\n      var e = arguments.length;\n      if (r && (t = Object(t)), e < 2 || null == t) return t;\n\n      for (var u = 1; u < e; u++) for (var o = arguments[u], i = n(o), a = i.length, f = 0; f < a; f++) {\n        var c = i[f];\n        r && void 0 !== t[c] || (t[c] = o[c]);\n      }\n\n      return t;\n    };\n  }\n\n  var xn = An(an),\n      Sn = An(nn),\n      On = An(an, !0);\n\n  function Mn(n) {\n    if (!_(n)) return {};\n    if (v) return v(n);\n\n    var r = function () {};\n\n    r.prototype = n;\n    var t = new r();\n    return r.prototype = null, t;\n  }\n\n  function En(n) {\n    return _(n) ? U(n) ? n.slice() : xn({}, n) : n;\n  }\n\n  function Bn(n) {\n    return U(n) ? n : [n];\n  }\n\n  function Nn(n) {\n    return tn.toPath(n);\n  }\n\n  function In(n, r) {\n    for (var t = r.length, e = 0; e < t; e++) {\n      if (null == n) return;\n      n = n[r[e]];\n    }\n\n    return t ? n : void 0;\n  }\n\n  function Tn(n, r, t) {\n    var e = In(n, Nn(r));\n    return w(e) ? t : e;\n  }\n\n  function kn(n) {\n    return n;\n  }\n\n  function Dn(n) {\n    return n = Sn({}, n), function (r) {\n      return rn(r, n);\n    };\n  }\n\n  function Rn(n) {\n    return n = Nn(n), function (r) {\n      return In(r, n);\n    };\n  }\n\n  function Fn(n, r, t) {\n    if (void 0 === r) return n;\n\n    switch (null == t ? 3 : t) {\n      case 1:\n        return function (t) {\n          return n.call(r, t);\n        };\n\n      case 3:\n        return function (t, e, u) {\n          return n.call(r, t, e, u);\n        };\n\n      case 4:\n        return function (t, e, u, o) {\n          return n.call(r, t, e, u, o);\n        };\n    }\n\n    return function () {\n      return n.apply(r, arguments);\n    };\n  }\n\n  function Vn(n, r, t) {\n    return null == n ? kn : D(n) ? Fn(n, r, t) : _(n) && !U(n) ? Dn(n) : Rn(n);\n  }\n\n  function Pn(n, r) {\n    return Vn(n, r, 1 / 0);\n  }\n\n  function qn(n, r, t) {\n    return tn.iteratee !== Pn ? tn.iteratee(n, r) : Vn(n, r, t);\n  }\n\n  function Un() {}\n\n  function Wn(n, r) {\n    return null == r && (r = n, n = 0), n + Math.floor(Math.random() * (r - n + 1));\n  }\n\n  tn.toPath = Bn, tn.iteratee = Pn;\n\n  var zn = Date.now || function () {\n    return new Date().getTime();\n  };\n\n  function Ln(n) {\n    var r = function (r) {\n      return n[r];\n    },\n        t = \"(?:\" + nn(n).join(\"|\") + \")\",\n        e = RegExp(t),\n        u = RegExp(t, \"g\");\n\n    return function (n) {\n      return n = null == n ? \"\" : \"\" + n, e.test(n) ? n.replace(u, r) : n;\n    };\n  }\n\n  var $n = {\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': \"&quot;\",\n    \"'\": \"&#x27;\",\n    \"`\": \"&#x60;\"\n  },\n      Cn = Ln($n),\n      Kn = Ln(_n($n)),\n      Jn = tn.templateSettings = {\n    evaluate: /<%([\\s\\S]+?)%>/g,\n    interpolate: /<%=([\\s\\S]+?)%>/g,\n    escape: /<%-([\\s\\S]+?)%>/g\n  },\n      Gn = /(.)^/,\n      Hn = {\n    \"'\": \"'\",\n    \"\\\\\": \"\\\\\",\n    \"\\r\": \"r\",\n    \"\\n\": \"n\",\n    \"\\u2028\": \"u2028\",\n    \"\\u2029\": \"u2029\"\n  },\n      Qn = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n  function Xn(n) {\n    return \"\\\\\" + Hn[n];\n  }\n\n  var Yn = /^\\s*(\\w|\\$)+\\s*$/;\n  var Zn = 0;\n\n  function nr(n, r, t, e, u) {\n    if (!(e instanceof r)) return n.apply(t, u);\n    var o = Mn(n.prototype),\n        i = n.apply(o, u);\n    return _(i) ? i : o;\n  }\n\n  var rr = j(function (n, r) {\n    var t = rr.placeholder,\n        e = function () {\n      for (var u = 0, o = r.length, i = Array(o), a = 0; a < o; a++) i[a] = r[a] === t ? arguments[u++] : r[a];\n\n      for (; u < arguments.length;) i.push(arguments[u++]);\n\n      return nr(n, e, this, this, i);\n    };\n\n    return e;\n  });\n  rr.placeholder = tn;\n  var tr = j(function (n, r, t) {\n    if (!D(n)) throw new TypeError(\"Bind must be called on a function\");\n    var e = j(function (u) {\n      return nr(n, e, r, this, t.concat(u));\n    });\n    return e;\n  }),\n      er = K(Y);\n\n  function ur(n, r, t, e) {\n    if (e = e || [], r || 0 === r) {\n      if (r <= 0) return e.concat(n);\n    } else r = 1 / 0;\n\n    for (var u = e.length, o = 0, i = Y(n); o < i; o++) {\n      var a = n[o];\n      if (er(a) && (U(a) || L(a))) {\n        if (r > 1) ur(a, r - 1, t, e), u = e.length;else for (var f = 0, c = a.length; f < c;) e[u++] = a[f++];\n      } else t || (e[u++] = a);\n    }\n\n    return e;\n  }\n\n  var or = j(function (n, r) {\n    var t = (r = ur(r, !1, !1)).length;\n    if (t < 1) throw new Error(\"bindAll must be passed function names\");\n\n    for (; t--;) {\n      var e = r[t];\n      n[e] = tr(n[e], n);\n    }\n\n    return n;\n  });\n  var ir = j(function (n, r, t) {\n    return setTimeout(function () {\n      return n.apply(null, t);\n    }, r);\n  }),\n      ar = rr(ir, tn, 1);\n\n  function fr(n) {\n    return function () {\n      return !n.apply(this, arguments);\n    };\n  }\n\n  function cr(n, r) {\n    var t;\n    return function () {\n      return --n > 0 && (t = r.apply(this, arguments)), n <= 1 && (r = null), t;\n    };\n  }\n\n  var lr = rr(cr, 2);\n\n  function sr(n, r, t) {\n    r = qn(r, t);\n\n    for (var e, u = nn(n), o = 0, i = u.length; o < i; o++) if (r(n[e = u[o]], e, n)) return e;\n  }\n\n  function pr(n) {\n    return function (r, t, e) {\n      t = qn(t, e);\n\n      for (var u = Y(r), o = n > 0 ? 0 : u - 1; o >= 0 && o < u; o += n) if (t(r[o], o, r)) return o;\n\n      return -1;\n    };\n  }\n\n  var vr = pr(1),\n      hr = pr(-1);\n\n  function yr(n, r, t, e) {\n    for (var u = (t = qn(t, e, 1))(r), o = 0, i = Y(n); o < i;) {\n      var a = Math.floor((o + i) / 2);\n      t(n[a]) < u ? o = a + 1 : i = a;\n    }\n\n    return o;\n  }\n\n  function dr(n, r, t) {\n    return function (e, u, o) {\n      var a = 0,\n          f = Y(e);\n      if (\"number\" == typeof o) n > 0 ? a = o >= 0 ? o : Math.max(o + f, a) : f = o >= 0 ? Math.min(o + 1, f) : o + f + 1;else if (t && o && f) return e[o = t(e, u)] === u ? o : -1;\n      if (u != u) return (o = r(i.call(e, a, f), $)) >= 0 ? o + a : -1;\n\n      for (o = n > 0 ? a : f - 1; o >= 0 && o < f; o += n) if (e[o] === u) return o;\n\n      return -1;\n    };\n  }\n\n  var gr = dr(1, vr, yr),\n      br = dr(-1, hr);\n\n  function mr(n, r, t) {\n    var e = (er(n) ? vr : sr)(n, r, t);\n    if (void 0 !== e && -1 !== e) return n[e];\n  }\n\n  function jr(n, r, t) {\n    var e, u;\n    if (r = Fn(r, t), er(n)) for (e = 0, u = n.length; e < u; e++) r(n[e], e, n);else {\n      var o = nn(n);\n\n      for (e = 0, u = o.length; e < u; e++) r(n[o[e]], o[e], n);\n    }\n    return n;\n  }\n\n  function _r(n, r, t) {\n    r = qn(r, t);\n\n    for (var e = !er(n) && nn(n), u = (e || n).length, o = Array(u), i = 0; i < u; i++) {\n      var a = e ? e[i] : i;\n      o[i] = r(n[a], a, n);\n    }\n\n    return o;\n  }\n\n  function wr(n) {\n    var r = function (r, t, e, u) {\n      var o = !er(r) && nn(r),\n          i = (o || r).length,\n          a = n > 0 ? 0 : i - 1;\n\n      for (u || (e = r[o ? o[a] : a], a += n); a >= 0 && a < i; a += n) {\n        var f = o ? o[a] : a;\n        e = t(e, r[f], f, r);\n      }\n\n      return e;\n    };\n\n    return function (n, t, e, u) {\n      var o = arguments.length >= 3;\n      return r(n, Fn(t, u, 4), e, o);\n    };\n  }\n\n  var Ar = wr(1),\n      xr = wr(-1);\n\n  function Sr(n, r, t) {\n    var e = [];\n    return r = qn(r, t), jr(n, function (n, t, u) {\n      r(n, t, u) && e.push(n);\n    }), e;\n  }\n\n  function Or(n, r, t) {\n    r = qn(r, t);\n\n    for (var e = !er(n) && nn(n), u = (e || n).length, o = 0; o < u; o++) {\n      var i = e ? e[o] : o;\n      if (!r(n[i], i, n)) return !1;\n    }\n\n    return !0;\n  }\n\n  function Mr(n, r, t) {\n    r = qn(r, t);\n\n    for (var e = !er(n) && nn(n), u = (e || n).length, o = 0; o < u; o++) {\n      var i = e ? e[o] : o;\n      if (r(n[i], i, n)) return !0;\n    }\n\n    return !1;\n  }\n\n  function Er(n, r, t, e) {\n    return er(n) || (n = jn(n)), (\"number\" != typeof t || e) && (t = 0), gr(n, r, t) >= 0;\n  }\n\n  var Br = j(function (n, r, t) {\n    var e, u;\n    return D(r) ? u = r : (r = Nn(r), e = r.slice(0, -1), r = r[r.length - 1]), _r(n, function (n) {\n      var o = u;\n\n      if (!o) {\n        if (e && e.length && (n = In(n, e)), null == n) return;\n        o = n[r];\n      }\n\n      return null == o ? o : o.apply(n, t);\n    });\n  });\n\n  function Nr(n, r) {\n    return _r(n, Rn(r));\n  }\n\n  function Ir(n, r, t) {\n    var e,\n        u,\n        o = -1 / 0,\n        i = -1 / 0;\n    if (null == r || \"number\" == typeof r && \"object\" != typeof n[0] && null != n) for (var a = 0, f = (n = er(n) ? n : jn(n)).length; a < f; a++) null != (e = n[a]) && e > o && (o = e);else r = qn(r, t), jr(n, function (n, t, e) {\n      ((u = r(n, t, e)) > i || u === -1 / 0 && o === -1 / 0) && (o = n, i = u);\n    });\n    return o;\n  }\n\n  function Tr(n, r, t) {\n    if (null == r || t) return er(n) || (n = jn(n)), n[Wn(n.length - 1)];\n    var e = er(n) ? En(n) : jn(n),\n        u = Y(e);\n    r = Math.max(Math.min(r, u), 0);\n\n    for (var o = u - 1, i = 0; i < r; i++) {\n      var a = Wn(i, o),\n          f = e[i];\n      e[i] = e[a], e[a] = f;\n    }\n\n    return e.slice(0, r);\n  }\n\n  function kr(n, r) {\n    return function (t, e, u) {\n      var o = r ? [[], []] : {};\n      return e = qn(e, u), jr(t, function (r, u) {\n        var i = e(r, u, t);\n        n(o, r, i);\n      }), o;\n    };\n  }\n\n  var Dr = kr(function (n, r, t) {\n    W(n, t) ? n[t].push(r) : n[t] = [r];\n  }),\n      Rr = kr(function (n, r, t) {\n    n[t] = r;\n  }),\n      Fr = kr(function (n, r, t) {\n    W(n, t) ? n[t]++ : n[t] = 1;\n  }),\n      Vr = kr(function (n, r, t) {\n    n[t ? 0 : 1].push(r);\n  }, !0),\n      Pr = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n\n  function qr(n, r, t) {\n    return r in t;\n  }\n\n  var Ur = j(function (n, r) {\n    var t = {},\n        e = r[0];\n    if (null == n) return t;\n    D(e) ? (r.length > 1 && (e = Fn(e, r[1])), r = an(n)) : (e = qr, r = ur(r, !1, !1), n = Object(n));\n\n    for (var u = 0, o = r.length; u < o; u++) {\n      var i = r[u],\n          a = n[i];\n      e(a, i, n) && (t[i] = a);\n    }\n\n    return t;\n  }),\n      Wr = j(function (n, r) {\n    var t,\n        e = r[0];\n    return D(e) ? (e = fr(e), r.length > 1 && (t = r[1])) : (r = _r(ur(r, !1, !1), String), e = function (n, t) {\n      return !Er(r, t);\n    }), Ur(n, e, t);\n  });\n\n  function zr(n, r, t) {\n    return i.call(n, 0, Math.max(0, n.length - (null == r || t ? 1 : r)));\n  }\n\n  function Lr(n, r, t) {\n    return null == n || n.length < 1 ? null == r || t ? void 0 : [] : null == r || t ? n[0] : zr(n, n.length - r);\n  }\n\n  function $r(n, r, t) {\n    return i.call(n, null == r || t ? 1 : r);\n  }\n\n  var Cr = j(function (n, r) {\n    return r = ur(r, !0, !0), Sr(n, function (n) {\n      return !Er(r, n);\n    });\n  }),\n      Kr = j(function (n, r) {\n    return Cr(n, r);\n  });\n\n  function Jr(n, r, t, e) {\n    A(r) || (e = t, t = r, r = !1), null != t && (t = qn(t, e));\n\n    for (var u = [], o = [], i = 0, a = Y(n); i < a; i++) {\n      var f = n[i],\n          c = t ? t(f, i, n) : f;\n      r && !t ? (i && o === c || u.push(f), o = c) : t ? Er(o, c) || (o.push(c), u.push(f)) : Er(u, f) || u.push(f);\n    }\n\n    return u;\n  }\n\n  var Gr = j(function (n) {\n    return Jr(ur(n, !0, !0));\n  });\n\n  function Hr(n) {\n    for (var r = n && Ir(n, Y).length || 0, t = Array(r), e = 0; e < r; e++) t[e] = Nr(n, e);\n\n    return t;\n  }\n\n  var Qr = j(Hr);\n\n  function Xr(n, r) {\n    return n._chain ? tn(r).chain() : r;\n  }\n\n  function Yr(n) {\n    return jr(wn(n), function (r) {\n      var t = tn[r] = n[r];\n\n      tn.prototype[r] = function () {\n        var n = [this._wrapped];\n        return o.apply(n, arguments), Xr(this, t.apply(tn, n));\n      };\n    }), tn;\n  }\n\n  jr([\"pop\", \"push\", \"reverse\", \"shift\", \"sort\", \"splice\", \"unshift\"], function (n) {\n    var r = t[n];\n\n    tn.prototype[n] = function () {\n      var t = this._wrapped;\n      return null != t && (r.apply(t, arguments), \"shift\" !== n && \"splice\" !== n || 0 !== t.length || delete t[0]), Xr(this, t);\n    };\n  }), jr([\"concat\", \"join\", \"slice\"], function (n) {\n    var r = t[n];\n\n    tn.prototype[n] = function () {\n      var n = this._wrapped;\n      return null != n && (n = r.apply(n, arguments)), Xr(this, n);\n    };\n  });\n  var Zr = Yr({\n    __proto__: null,\n    VERSION: n,\n    restArguments: j,\n    isObject: _,\n    isNull: function (n) {\n      return null === n;\n    },\n    isUndefined: w,\n    isBoolean: A,\n    isElement: function (n) {\n      return !(!n || 1 !== n.nodeType);\n    },\n    isString: S,\n    isNumber: O,\n    isDate: M,\n    isRegExp: E,\n    isError: B,\n    isSymbol: N,\n    isArrayBuffer: I,\n    isDataView: q,\n    isArray: U,\n    isFunction: D,\n    isArguments: L,\n    isFinite: function (n) {\n      return !N(n) && d(n) && !isNaN(parseFloat(n));\n    },\n    isNaN: $,\n    isTypedArray: X,\n    isEmpty: function (n) {\n      if (null == n) return !0;\n      var r = Y(n);\n      return \"number\" == typeof r && (U(n) || S(n) || L(n)) ? 0 === r : 0 === Y(nn(n));\n    },\n    isMatch: rn,\n    isEqual: function (n, r) {\n      return on(n, r);\n    },\n    isMap: dn,\n    isWeakMap: gn,\n    isSet: bn,\n    isWeakSet: mn,\n    keys: nn,\n    allKeys: an,\n    values: jn,\n    pairs: function (n) {\n      for (var r = nn(n), t = r.length, e = Array(t), u = 0; u < t; u++) e[u] = [r[u], n[r[u]]];\n\n      return e;\n    },\n    invert: _n,\n    functions: wn,\n    methods: wn,\n    extend: xn,\n    extendOwn: Sn,\n    assign: Sn,\n    defaults: On,\n    create: function (n, r) {\n      var t = Mn(n);\n      return r && Sn(t, r), t;\n    },\n    clone: En,\n    tap: function (n, r) {\n      return r(n), n;\n    },\n    get: Tn,\n    has: function (n, r) {\n      for (var t = (r = Nn(r)).length, e = 0; e < t; e++) {\n        var u = r[e];\n        if (!W(n, u)) return !1;\n        n = n[u];\n      }\n\n      return !!t;\n    },\n    mapObject: function (n, r, t) {\n      r = qn(r, t);\n\n      for (var e = nn(n), u = e.length, o = {}, i = 0; i < u; i++) {\n        var a = e[i];\n        o[a] = r(n[a], a, n);\n      }\n\n      return o;\n    },\n    identity: kn,\n    constant: C,\n    noop: Un,\n    toPath: Bn,\n    property: Rn,\n    propertyOf: function (n) {\n      return null == n ? Un : function (r) {\n        return Tn(n, r);\n      };\n    },\n    matcher: Dn,\n    matches: Dn,\n    times: function (n, r, t) {\n      var e = Array(Math.max(0, n));\n      r = Fn(r, t, 1);\n\n      for (var u = 0; u < n; u++) e[u] = r(u);\n\n      return e;\n    },\n    random: Wn,\n    now: zn,\n    escape: Cn,\n    unescape: Kn,\n    templateSettings: Jn,\n    template: function (n, r, t) {\n      !r && t && (r = t), r = On({}, r, tn.templateSettings);\n      var e = RegExp([(r.escape || Gn).source, (r.interpolate || Gn).source, (r.evaluate || Gn).source].join(\"|\") + \"|$\", \"g\"),\n          u = 0,\n          o = \"__p+='\";\n      n.replace(e, function (r, t, e, i, a) {\n        return o += n.slice(u, a).replace(Qn, Xn), u = a + r.length, t ? o += \"'+\\n((__t=(\" + t + \"))==null?'':_.escape(__t))+\\n'\" : e ? o += \"'+\\n((__t=(\" + e + \"))==null?'':__t)+\\n'\" : i && (o += \"';\\n\" + i + \"\\n__p+='\"), r;\n      }), o += \"';\\n\";\n      var i,\n          a = r.variable;\n\n      if (a) {\n        if (!Yn.test(a)) throw new Error(\"variable is not a bare identifier: \" + a);\n      } else o = \"with(obj||{}){\\n\" + o + \"}\\n\", a = \"obj\";\n\n      o = \"var __t,__p='',__j=Array.prototype.join,\" + \"print=function(){__p+=__j.call(arguments,'');};\\n\" + o + \"return __p;\\n\";\n\n      try {\n        i = new Function(a, \"_\", o);\n      } catch (n) {\n        throw n.source = o, n;\n      }\n\n      var f = function (n) {\n        return i.call(this, n, tn);\n      };\n\n      return f.source = \"function(\" + a + \"){\\n\" + o + \"}\", f;\n    },\n    result: function (n, r, t) {\n      var e = (r = Nn(r)).length;\n      if (!e) return D(t) ? t.call(n) : t;\n\n      for (var u = 0; u < e; u++) {\n        var o = null == n ? void 0 : n[r[u]];\n        void 0 === o && (o = t, u = e), n = D(o) ? o.call(n) : o;\n      }\n\n      return n;\n    },\n    uniqueId: function (n) {\n      var r = ++Zn + \"\";\n      return n ? n + r : r;\n    },\n    chain: function (n) {\n      var r = tn(n);\n      return r._chain = !0, r;\n    },\n    iteratee: Pn,\n    partial: rr,\n    bind: tr,\n    bindAll: or,\n    memoize: function (n, r) {\n      var t = function (e) {\n        var u = t.cache,\n            o = \"\" + (r ? r.apply(this, arguments) : e);\n        return W(u, o) || (u[o] = n.apply(this, arguments)), u[o];\n      };\n\n      return t.cache = {}, t;\n    },\n    delay: ir,\n    defer: ar,\n    throttle: function (n, r, t) {\n      var e,\n          u,\n          o,\n          i,\n          a = 0;\n      t || (t = {});\n\n      var f = function () {\n        a = !1 === t.leading ? 0 : zn(), e = null, i = n.apply(u, o), e || (u = o = null);\n      },\n          c = function () {\n        var c = zn();\n        a || !1 !== t.leading || (a = c);\n        var l = r - (c - a);\n        return u = this, o = arguments, l <= 0 || l > r ? (e && (clearTimeout(e), e = null), a = c, i = n.apply(u, o), e || (u = o = null)) : e || !1 === t.trailing || (e = setTimeout(f, l)), i;\n      };\n\n      return c.cancel = function () {\n        clearTimeout(e), a = 0, e = u = o = null;\n      }, c;\n    },\n    debounce: function (n, r, t) {\n      var e,\n          u,\n          o,\n          i,\n          a,\n          f = function () {\n        var c = zn() - u;\n        r > c ? e = setTimeout(f, r - c) : (e = null, t || (i = n.apply(a, o)), e || (o = a = null));\n      },\n          c = j(function (c) {\n        return a = this, o = c, u = zn(), e || (e = setTimeout(f, r), t && (i = n.apply(a, o))), i;\n      });\n\n      return c.cancel = function () {\n        clearTimeout(e), e = o = a = null;\n      }, c;\n    },\n    wrap: function (n, r) {\n      return rr(r, n);\n    },\n    negate: fr,\n    compose: function () {\n      var n = arguments,\n          r = n.length - 1;\n      return function () {\n        for (var t = r, e = n[r].apply(this, arguments); t--;) e = n[t].call(this, e);\n\n        return e;\n      };\n    },\n    after: function (n, r) {\n      return function () {\n        if (--n < 1) return r.apply(this, arguments);\n      };\n    },\n    before: cr,\n    once: lr,\n    findKey: sr,\n    findIndex: vr,\n    findLastIndex: hr,\n    sortedIndex: yr,\n    indexOf: gr,\n    lastIndexOf: br,\n    find: mr,\n    detect: mr,\n    findWhere: function (n, r) {\n      return mr(n, Dn(r));\n    },\n    each: jr,\n    forEach: jr,\n    map: _r,\n    collect: _r,\n    reduce: Ar,\n    foldl: Ar,\n    inject: Ar,\n    reduceRight: xr,\n    foldr: xr,\n    filter: Sr,\n    select: Sr,\n    reject: function (n, r, t) {\n      return Sr(n, fr(qn(r)), t);\n    },\n    every: Or,\n    all: Or,\n    some: Mr,\n    any: Mr,\n    contains: Er,\n    includes: Er,\n    include: Er,\n    invoke: Br,\n    pluck: Nr,\n    where: function (n, r) {\n      return Sr(n, Dn(r));\n    },\n    max: Ir,\n    min: function (n, r, t) {\n      var e,\n          u,\n          o = 1 / 0,\n          i = 1 / 0;\n      if (null == r || \"number\" == typeof r && \"object\" != typeof n[0] && null != n) for (var a = 0, f = (n = er(n) ? n : jn(n)).length; a < f; a++) null != (e = n[a]) && e < o && (o = e);else r = qn(r, t), jr(n, function (n, t, e) {\n        ((u = r(n, t, e)) < i || u === 1 / 0 && o === 1 / 0) && (o = n, i = u);\n      });\n      return o;\n    },\n    shuffle: function (n) {\n      return Tr(n, 1 / 0);\n    },\n    sample: Tr,\n    sortBy: function (n, r, t) {\n      var e = 0;\n      return r = qn(r, t), Nr(_r(n, function (n, t, u) {\n        return {\n          value: n,\n          index: e++,\n          criteria: r(n, t, u)\n        };\n      }).sort(function (n, r) {\n        var t = n.criteria,\n            e = r.criteria;\n\n        if (t !== e) {\n          if (t > e || void 0 === t) return 1;\n          if (t < e || void 0 === e) return -1;\n        }\n\n        return n.index - r.index;\n      }), \"value\");\n    },\n    groupBy: Dr,\n    indexBy: Rr,\n    countBy: Fr,\n    partition: Vr,\n    toArray: function (n) {\n      return n ? U(n) ? i.call(n) : S(n) ? n.match(Pr) : er(n) ? _r(n, kn) : jn(n) : [];\n    },\n    size: function (n) {\n      return null == n ? 0 : er(n) ? n.length : nn(n).length;\n    },\n    pick: Ur,\n    omit: Wr,\n    first: Lr,\n    head: Lr,\n    take: Lr,\n    initial: zr,\n    last: function (n, r, t) {\n      return null == n || n.length < 1 ? null == r || t ? void 0 : [] : null == r || t ? n[n.length - 1] : $r(n, Math.max(0, n.length - r));\n    },\n    rest: $r,\n    tail: $r,\n    drop: $r,\n    compact: function (n) {\n      return Sr(n, Boolean);\n    },\n    flatten: function (n, r) {\n      return ur(n, r, !1);\n    },\n    without: Kr,\n    uniq: Jr,\n    unique: Jr,\n    union: Gr,\n    intersection: function (n) {\n      for (var r = [], t = arguments.length, e = 0, u = Y(n); e < u; e++) {\n        var o = n[e];\n\n        if (!Er(r, o)) {\n          var i;\n\n          for (i = 1; i < t && Er(arguments[i], o); i++);\n\n          i === t && r.push(o);\n        }\n      }\n\n      return r;\n    },\n    difference: Cr,\n    unzip: Hr,\n    transpose: Hr,\n    zip: Qr,\n    object: function (n, r) {\n      for (var t = {}, e = 0, u = Y(n); e < u; e++) r ? t[n[e]] = r[e] : t[n[e][0]] = n[e][1];\n\n      return t;\n    },\n    range: function (n, r, t) {\n      null == r && (r = n || 0, n = 0), t || (t = r < n ? -1 : 1);\n\n      for (var e = Math.max(Math.ceil((r - n) / t), 0), u = Array(e), o = 0; o < e; o++, n += t) u[o] = n;\n\n      return u;\n    },\n    chunk: function (n, r) {\n      if (null == r || r < 1) return [];\n\n      for (var t = [], e = 0, u = n.length; e < u;) t.push(i.call(n, e, e += r));\n\n      return t;\n    },\n    mixin: Yr,\n    default: tn\n  });\n  return Zr._ = Zr, Zr;\n});\n}(underscoreMin));\n\nvar _ = underscoreMin.exports;\n\nexport { _ as default };\n","import _Handlebars2 from '../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport _ from '../../../lib/underscore/underscore-min.js';\n\n/* eslint @okta/okta-ui/no-specific-methods: 0, @okta/okta-ui/no-specific-modules: 0 */\n\n_.mixin({\n  resultCtx: function (object, property, context, defaultValue) {\n    let value = _.isObject(object) ? object[property] : void 0;\n\n    if (_.isFunction(value)) {\n      value = value.call(context || object);\n    }\n\n    if (value) {\n      return value;\n    } else {\n      return !_.isUndefined(defaultValue) ? defaultValue : value;\n    }\n  },\n  isInteger: function (x) {\n    return _.isNumber(x) && x % 1 === 0;\n  },\n  // TODO: This will be deprecated at some point. Views should use precompiled templates\n  // eslint-disable-next-line @okta/okta-ui/no-bare-templates\n  template: function (source, data) {\n    const template = _Handlebars2.compile(source);\n\n    if (data) {\n      return template(data);\n    }\n\n    const fn = function (data) {\n      return template(data);\n    };\n\n    fn.source = ''; // to conform with \"CompiledTemplate\" type definition\n\n    return fn;\n  }\n});\n\nconst oktaUnderscore = _;\n\nexport { oktaUnderscore as default };\n","var backbone = {exports: {}};\n\nexport { backbone as b };\n","import { commonjsGlobal } from '../../../../_virtual/_commonjsHelpers.js';\nimport { b as backbone } from '../../../../_virtual/backbone.js';\nimport $ from 'jquery';\nimport '../../../../lib/underscore/underscore-min.js';\nimport { u as underscoreMin } from '../../../../_virtual/underscore-min.js';\n\n(function (module, exports) {\n//     Backbone.js 1.4.0\n//     (c) 2010-2019 Jeremy Ashkenas and DocumentCloud\n//     Backbone may be freely distributed under the MIT license.\n//     For all details and documentation:\n//     http://backbonejs.org\nconst jQuery = $;\n(function (factory) {\n  // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n  // We use `self` instead of `window` for `WebWorker` support.\n  var root = typeof self == 'object' && self.self === self && self || typeof commonjsGlobal == 'object' && commonjsGlobal.global === commonjsGlobal && commonjsGlobal; // Set up Backbone appropriately for the environment. Start with AMD.\n\n  {\n    var _ = underscoreMin.exports,\n        $;\n\n    try {\n      $ = jQuery;\n    } catch (e) {}\n\n    factory(root, exports, _, $); // Finally, as a browser global.\n  }\n})(function (root, Backbone, _, $) {\n  // Initial Setup\n  // -------------\n  // Save the previous value of the `Backbone` variable, so that it can be\n  // restored later on, if `noConflict` is used.\n  var previousBackbone = root.Backbone; // Create a local reference to a common array method we'll want to use later.\n\n  var slice = Array.prototype.slice; // Current version of the library. Keep in sync with `package.json`.\n\n  Backbone.VERSION = '1.4.0'; // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n  // the `$` variable.\n\n  Backbone.$ = $; // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n  // to its previous owner. Returns a reference to this Backbone object.\n\n  Backbone.noConflict = function () {\n    root.Backbone = previousBackbone;\n    return this;\n  }; // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n  // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n  // set a `X-Http-Method-Override` header.\n\n\n  Backbone.emulateHTTP = false; // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n  // `application/json` requests ... this will encode the body as\n  // `application/x-www-form-urlencoded` instead and will send the model in a\n  // form param named `model`.\n\n  Backbone.emulateJSON = false; // Backbone.Events\n  // ---------------\n  // A module that can be mixed in to *any object* in order to provide it with\n  // a custom event channel. You may bind a callback to an event with `on` or\n  // remove with `off`; `trigger`-ing an event fires all callbacks in\n  // succession.\n  //\n  //     var object = {};\n  //     _.extend(object, Backbone.Events);\n  //     object.on('expand', function(){ alert('expanded'); });\n  //     object.trigger('expand');\n  //\n\n  var Events = Backbone.Events = {}; // Regular expression used to split event strings.\n\n  var eventSplitter = /\\s+/; // A private global variable to share between listeners and listenees.\n\n  var _listening; // Iterates over the standard `event, callback` (as well as the fancy multiple\n  // space-separated events `\"change blur\", callback` and jQuery-style event\n  // maps `{event: callback}`).\n\n\n  var eventsApi = function (iteratee, events, name, callback, opts) {\n    var i = 0,\n        names;\n\n    if (name && typeof name === 'object') {\n      // Handle event maps.\n      if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n\n      for (names = _.keys(name); i < names.length; i++) {\n        events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n      }\n    } else if (name && eventSplitter.test(name)) {\n      // Handle space-separated event names by delegating them individually.\n      for (names = name.split(eventSplitter); i < names.length; i++) {\n        events = iteratee(events, names[i], callback, opts);\n      }\n    } else {\n      // Finally, standard events.\n      events = iteratee(events, name, callback, opts);\n    }\n\n    return events;\n  }; // Bind an event to a `callback` function. Passing `\"all\"` will bind\n  // the callback to all events fired.\n\n\n  Events.on = function (name, callback, context) {\n    this._events = eventsApi(onApi, this._events || {}, name, callback, {\n      context: context,\n      ctx: this,\n      listening: _listening\n    });\n\n    if (_listening) {\n      var listeners = this._listeners || (this._listeners = {});\n      listeners[_listening.id] = _listening; // Allow the listening to use a counter, instead of tracking\n      // callbacks for library interop\n\n      _listening.interop = false;\n    }\n\n    return this;\n  }; // Inversion-of-control versions of `on`. Tell *this* object to listen to\n  // an event in another object... keeping track of what it's listening to\n  // for easier unbinding later.\n\n\n  Events.listenTo = function (obj, name, callback) {\n    if (!obj) return this;\n\n    var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n\n    var listeningTo = this._listeningTo || (this._listeningTo = {});\n    var listening = _listening = listeningTo[id]; // This object is not listening to any other events on `obj` yet.\n    // Setup the necessary references to track the listening callbacks.\n\n    if (!listening) {\n      this._listenId || (this._listenId = _.uniqueId('l'));\n      listening = _listening = listeningTo[id] = new Listening(this, obj);\n    } // Bind callbacks on obj.\n\n\n    var error = tryCatchOn(obj, name, callback, this);\n    _listening = void 0;\n    if (error) throw error; // If the target obj is not Backbone.Events, track events manually.\n\n    if (listening.interop) listening.on(name, callback);\n    return this;\n  }; // The reducing API that adds a callback to the `events` object.\n\n\n  var onApi = function (events, name, callback, options) {\n    if (callback) {\n      var handlers = events[name] || (events[name] = []);\n      var context = options.context,\n          ctx = options.ctx,\n          listening = options.listening;\n      if (listening) listening.count++;\n      handlers.push({\n        callback: callback,\n        context: context,\n        ctx: context || ctx,\n        listening: listening\n      });\n    }\n\n    return events;\n  }; // An try-catch guarded #on function, to prevent poisoning the global\n  // `_listening` variable.\n\n\n  var tryCatchOn = function (obj, name, callback, context) {\n    try {\n      obj.on(name, callback, context);\n    } catch (e) {\n      return e;\n    }\n  }; // Remove one or many callbacks. If `context` is null, removes all\n  // callbacks with that function. If `callback` is null, removes all\n  // callbacks for the event. If `name` is null, removes all bound\n  // callbacks for all events.\n\n\n  Events.off = function (name, callback, context) {\n    if (!this._events) return this;\n    this._events = eventsApi(offApi, this._events, name, callback, {\n      context: context,\n      listeners: this._listeners\n    });\n    return this;\n  }; // Tell this object to stop listening to either specific events ... or\n  // to every object it's currently listening to.\n\n\n  Events.stopListening = function (obj, name, callback) {\n    var listeningTo = this._listeningTo;\n    if (!listeningTo) return this;\n    var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\n    for (var i = 0; i < ids.length; i++) {\n      var listening = listeningTo[ids[i]]; // If listening doesn't exist, this object is not currently\n      // listening to obj. Break out early.\n\n      if (!listening) break;\n      listening.obj.off(name, callback, this);\n      if (listening.interop) listening.off(name, callback);\n    }\n\n    if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n    return this;\n  }; // The reducing API that removes a callback from the `events` object.\n\n\n  var offApi = function (events, name, callback, options) {\n    if (!events) return;\n    var context = options.context,\n        listeners = options.listeners;\n    var i = 0,\n        names; // Delete all event listeners and \"drop\" events.\n\n    if (!name && !context && !callback) {\n      for (names = _.keys(listeners); i < names.length; i++) {\n        listeners[names[i]].cleanup();\n      }\n\n      return;\n    }\n\n    names = name ? [name] : _.keys(events);\n\n    for (; i < names.length; i++) {\n      name = names[i];\n      var handlers = events[name]; // Bail out if there are no events stored.\n\n      if (!handlers) break; // Find any remaining events.\n\n      var remaining = [];\n\n      for (var j = 0; j < handlers.length; j++) {\n        var handler = handlers[j];\n\n        if (callback && callback !== handler.callback && callback !== handler.callback._callback || context && context !== handler.context) {\n          remaining.push(handler);\n        } else {\n          var listening = handler.listening;\n          if (listening) listening.off(name, callback);\n        }\n      } // Replace events if there are any remaining.  Otherwise, clean up.\n\n\n      if (remaining.length) {\n        events[name] = remaining;\n      } else {\n        delete events[name];\n      }\n    }\n\n    return events;\n  }; // Bind an event to only be triggered a single time. After the first time\n  // the callback is invoked, its listener will be removed. If multiple events\n  // are passed in using the space-separated syntax, the handler will fire\n  // once for each event, not once for a combination of all events.\n\n\n  Events.once = function (name, callback, context) {\n    // Map the event into a `{event: once}` object.\n    var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n    if (typeof name === 'string' && context == null) callback = void 0;\n    return this.on(events, callback, context);\n  }; // Inversion-of-control versions of `once`.\n\n\n  Events.listenToOnce = function (obj, name, callback) {\n    // Map the event into a `{event: once}` object.\n    var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n    return this.listenTo(obj, events);\n  }; // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n  // `offer` unbinds the `onceWrapper` after it has been called.\n\n\n  var onceMap = function (map, name, callback, offer) {\n    if (callback) {\n      var once = map[name] = _.once(function () {\n        offer(name, once);\n        callback.apply(this, arguments);\n      });\n\n      once._callback = callback;\n    }\n\n    return map;\n  }; // Trigger one or many events, firing all bound callbacks. Callbacks are\n  // passed the same arguments as `trigger` is, apart from the event name\n  // (unless you're listening on `\"all\"`, which will cause your callback to\n  // receive the true name of the event as the first argument).\n\n\n  Events.trigger = function (name) {\n    if (!this._events) return this;\n    var length = Math.max(0, arguments.length - 1);\n    var args = Array(length);\n\n    for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n    eventsApi(triggerApi, this._events, name, void 0, args);\n    return this;\n  }; // Handles triggering the appropriate event callbacks.\n\n\n  var triggerApi = function (objEvents, name, callback, args) {\n    if (objEvents) {\n      var events = objEvents[name];\n      var allEvents = objEvents.all;\n      if (events && allEvents) allEvents = allEvents.slice();\n      if (events) triggerEvents(events, args);\n      if (allEvents) triggerEvents(allEvents, [name].concat(args));\n    }\n\n    return objEvents;\n  }; // A difficult-to-believe, but optimized internal dispatch function for\n  // triggering events. Tries to keep the usual cases speedy (most internal\n  // Backbone events have 3 arguments).\n\n\n  var triggerEvents = function (events, args) {\n    var ev,\n        i = -1,\n        l = events.length,\n        a1 = args[0],\n        a2 = args[1],\n        a3 = args[2];\n\n    switch (args.length) {\n      case 0:\n        while (++i < l) (ev = events[i]).callback.call(ev.ctx);\n\n        return;\n\n      case 1:\n        while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1);\n\n        return;\n\n      case 2:\n        while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2);\n\n        return;\n\n      case 3:\n        while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3);\n\n        return;\n\n      default:\n        while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);\n\n        return;\n    }\n  }; // A listening class that tracks and cleans up memory bindings\n  // when all callbacks have been offed.\n\n\n  var Listening = function (listener, obj) {\n    this.id = listener._listenId;\n    this.listener = listener;\n    this.obj = obj;\n    this.interop = true;\n    this.count = 0;\n    this._events = void 0;\n  };\n\n  Listening.prototype.on = Events.on; // Offs a callback (or several).\n  // Uses an optimized counter if the listenee uses Backbone.Events.\n  // Otherwise, falls back to manual tracking to support events\n  // library interop.\n\n  Listening.prototype.off = function (name, callback) {\n    var cleanup;\n\n    if (this.interop) {\n      this._events = eventsApi(offApi, this._events, name, callback, {\n        context: void 0,\n        listeners: void 0\n      });\n      cleanup = !this._events;\n    } else {\n      this.count--;\n      cleanup = this.count === 0;\n    }\n\n    if (cleanup) this.cleanup();\n  }; // Cleans up memory bindings between the listener and the listenee.\n\n\n  Listening.prototype.cleanup = function () {\n    delete this.listener._listeningTo[this.obj._listenId];\n    if (!this.interop) delete this.obj._listeners[this.id];\n  }; // Aliases for backwards compatibility.\n\n\n  Events.bind = Events.on;\n  Events.unbind = Events.off; // Allow the `Backbone` object to serve as a global event bus, for folks who\n  // want global \"pubsub\" in a convenient place.\n\n  _.extend(Backbone, Events); // Backbone.Model\n  // --------------\n  // Backbone **Models** are the basic data object in the framework --\n  // frequently representing a row in a table in a database on your server.\n  // A discrete chunk of data and a bunch of useful, related methods for\n  // performing computations and transformations on that data.\n  // Create a new model with the specified attributes. A client id (`cid`)\n  // is automatically generated and assigned for you.\n\n\n  var Model = Backbone.Model = function (attributes, options) {\n    var attrs = attributes || {};\n    options || (options = {});\n    this.preinitialize.apply(this, arguments);\n    this.cid = _.uniqueId(this.cidPrefix);\n    this.attributes = {};\n    if (options.collection) this.collection = options.collection;\n    if (options.parse) attrs = this.parse(attrs, options) || {};\n\n    var defaults = _.result(this, 'defaults');\n\n    attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n    this.set(attrs, options);\n    this.changed = {};\n    this.initialize.apply(this, arguments);\n  }; // Attach all inheritable methods to the Model prototype.\n\n\n  _.extend(Model.prototype, Events, {\n    // A hash of attributes whose current and previous value differ.\n    changed: null,\n    // The value returned during the last failed validation.\n    validationError: null,\n    // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n    // CouchDB users may want to set this to `\"_id\"`.\n    idAttribute: 'id',\n    // The prefix is used to create the client id which is used to identify models locally.\n    // You may want to override this if you're experiencing name clashes with model ids.\n    cidPrefix: 'c',\n    // preinitialize is an empty function by default. You can override it with a function\n    // or object.  preinitialize will run before any instantiation logic is run in the Model.\n    preinitialize: function () {},\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function () {},\n    // Return a copy of the model's `attributes` object.\n    toJSON: function (options) {\n      return _.clone(this.attributes);\n    },\n    // Proxy `Backbone.sync` by default -- but override this if you need\n    // custom syncing semantics for *this* particular model.\n    sync: function () {\n      return Backbone.sync.apply(this, arguments);\n    },\n    // Get the value of an attribute.\n    get: function (attr) {\n      return this.attributes[attr];\n    },\n    // Get the HTML-escaped value of an attribute.\n    escape: function (attr) {\n      return _.escape(this.get(attr));\n    },\n    // Returns `true` if the attribute contains a value that is not null\n    // or undefined.\n    has: function (attr) {\n      return this.get(attr) != null;\n    },\n    // Special-cased proxy to underscore's `_.matches` method.\n    matches: function (attrs) {\n      return !!_.iteratee(attrs, this)(this.attributes);\n    },\n    // Set a hash of model attributes on the object, firing `\"change\"`. This is\n    // the core primitive operation of a model, updating the data and notifying\n    // anyone who needs to know about the change in state. The heart of the beast.\n    set: function (key, val, options) {\n      if (key == null) return this; // Handle both `\"key\", value` and `{key: value}` -style arguments.\n\n      var attrs;\n\n      if (typeof key === 'object') {\n        attrs = key;\n        options = val;\n      } else {\n        (attrs = {})[key] = val;\n      }\n\n      options || (options = {}); // Run validation.\n\n      if (!this._validate(attrs, options)) return false; // Extract attributes and options.\n\n      var unset = options.unset;\n      var silent = options.silent;\n      var changes = [];\n      var changing = this._changing;\n      this._changing = true;\n\n      if (!changing) {\n        this._previousAttributes = _.clone(this.attributes);\n        this.changed = {};\n      }\n\n      var current = this.attributes;\n      var changed = this.changed;\n      var prev = this._previousAttributes; // For each `set` attribute, update or delete the current value.\n\n      for (var attr in attrs) {\n        val = attrs[attr];\n        if (!_.isEqual(current[attr], val)) changes.push(attr);\n\n        if (!_.isEqual(prev[attr], val)) {\n          changed[attr] = val;\n        } else {\n          delete changed[attr];\n        }\n\n        unset ? delete current[attr] : current[attr] = val;\n      } // Update the `id`.\n\n\n      if (this.idAttribute in attrs) this.id = this.get(this.idAttribute); // Trigger all relevant attribute changes.\n\n      if (!silent) {\n        if (changes.length) this._pending = options;\n\n        for (var i = 0; i < changes.length; i++) {\n          this.trigger('change:' + changes[i], this, current[changes[i]], options);\n        }\n      } // You might be wondering why there's a `while` loop here. Changes can\n      // be recursively nested within `\"change\"` events.\n\n\n      if (changing) return this;\n\n      if (!silent) {\n        while (this._pending) {\n          options = this._pending;\n          this._pending = false;\n          this.trigger('change', this, options);\n        }\n      }\n\n      this._pending = false;\n      this._changing = false;\n      return this;\n    },\n    // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n    // if the attribute doesn't exist.\n    unset: function (attr, options) {\n      return this.set(attr, void 0, _.extend({}, options, {\n        unset: true\n      }));\n    },\n    // Clear all attributes on the model, firing `\"change\"`.\n    clear: function (options) {\n      var attrs = {};\n\n      for (var key in this.attributes) attrs[key] = void 0;\n\n      return this.set(attrs, _.extend({}, options, {\n        unset: true\n      }));\n    },\n    // Determine if the model has changed since the last `\"change\"` event.\n    // If you specify an attribute name, determine if that attribute has changed.\n    hasChanged: function (attr) {\n      if (attr == null) return !_.isEmpty(this.changed);\n      return _.has(this.changed, attr);\n    },\n    // Return an object containing all the attributes that have changed, or\n    // false if there are no changed attributes. Useful for determining what\n    // parts of a view need to be updated and/or what attributes need to be\n    // persisted to the server. Unset attributes will be set to undefined.\n    // You can also pass an attributes object to diff against the model,\n    // determining if there *would be* a change.\n    changedAttributes: function (diff) {\n      if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n      var old = this._changing ? this._previousAttributes : this.attributes;\n      var changed = {};\n      var hasChanged;\n\n      for (var attr in diff) {\n        var val = diff[attr];\n        if (_.isEqual(old[attr], val)) continue;\n        changed[attr] = val;\n        hasChanged = true;\n      }\n\n      return hasChanged ? changed : false;\n    },\n    // Get the previous value of an attribute, recorded at the time the last\n    // `\"change\"` event was fired.\n    previous: function (attr) {\n      if (attr == null || !this._previousAttributes) return null;\n      return this._previousAttributes[attr];\n    },\n    // Get all of the attributes of the model at the time of the previous\n    // `\"change\"` event.\n    previousAttributes: function () {\n      return _.clone(this._previousAttributes);\n    },\n    // Fetch the model from the server, merging the response with the model's\n    // local attributes. Any changed attributes will trigger a \"change\" event.\n    fetch: function (options) {\n      options = _.extend({\n        parse: true\n      }, options);\n      var model = this;\n      var success = options.success;\n\n      options.success = function (resp) {\n        var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n        if (!model.set(serverAttrs, options)) return false;\n        if (success) success.call(options.context, model, resp, options);\n        model.trigger('sync', model, resp, options);\n      };\n\n      wrapError(this, options);\n      return this.sync('read', this, options);\n    },\n    // Set a hash of model attributes, and sync the model to the server.\n    // If the server returns an attributes hash that differs, the model's\n    // state will be `set` again.\n    save: function (key, val, options) {\n      // Handle both `\"key\", value` and `{key: value}` -style arguments.\n      var attrs;\n\n      if (key == null || typeof key === 'object') {\n        attrs = key;\n        options = val;\n      } else {\n        (attrs = {})[key] = val;\n      }\n\n      options = _.extend({\n        validate: true,\n        parse: true\n      }, options);\n      var wait = options.wait; // If we're not waiting and attributes exist, save acts as\n      // `set(attr).save(null, opts)` with validation. Otherwise, check if\n      // the model will be valid when the attributes, if any, are set.\n\n      if (attrs && !wait) {\n        if (!this.set(attrs, options)) return false;\n      } else if (!this._validate(attrs, options)) {\n        return false;\n      } // After a successful server-side save, the client is (optionally)\n      // updated with the server-side state.\n\n\n      var model = this;\n      var success = options.success;\n      var attributes = this.attributes;\n\n      options.success = function (resp) {\n        // Ensure attributes are restored during synchronous saves.\n        model.attributes = attributes;\n        var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n        if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n        if (serverAttrs && !model.set(serverAttrs, options)) return false;\n        if (success) success.call(options.context, model, resp, options);\n        model.trigger('sync', model, resp, options);\n      };\n\n      wrapError(this, options); // Set temporary attributes if `{wait: true}` to properly find new ids.\n\n      if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n      var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n      if (method === 'patch' && !options.attrs) options.attrs = attrs;\n      var xhr = this.sync(method, this, options); // Restore attributes.\n\n      this.attributes = attributes;\n      return xhr;\n    },\n    // Destroy this model on the server if it was already persisted.\n    // Optimistically removes the model from its collection, if it has one.\n    // If `wait: true` is passed, waits for the server to respond before removal.\n    destroy: function (options) {\n      options = options ? _.clone(options) : {};\n      var model = this;\n      var success = options.success;\n      var wait = options.wait;\n\n      var destroy = function () {\n        model.stopListening();\n        model.trigger('destroy', model, model.collection, options);\n      };\n\n      options.success = function (resp) {\n        if (wait) destroy();\n        if (success) success.call(options.context, model, resp, options);\n        if (!model.isNew()) model.trigger('sync', model, resp, options);\n      };\n\n      var xhr = false;\n\n      if (this.isNew()) {\n        _.defer(options.success);\n      } else {\n        wrapError(this, options);\n        xhr = this.sync('delete', this, options);\n      }\n\n      if (!wait) destroy();\n      return xhr;\n    },\n    // Default URL for the model's representation on the server -- if you're\n    // using Backbone's restful methods, override this to change the endpoint\n    // that will be called.\n    url: function () {\n      var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();\n      if (this.isNew()) return base;\n      var id = this.get(this.idAttribute);\n      return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n    },\n    // **parse** converts a response into the hash of attributes to be `set` on\n    // the model. The default implementation is just to pass the response along.\n    parse: function (resp, options) {\n      return resp;\n    },\n    // Create a new model with identical attributes to this one.\n    clone: function () {\n      return new this.constructor(this.attributes);\n    },\n    // A model is new if it has never been saved to the server, and lacks an id.\n    isNew: function () {\n      return !this.has(this.idAttribute);\n    },\n    // Check if the model is currently in a valid state.\n    isValid: function (options) {\n      return this._validate({}, _.extend({}, options, {\n        validate: true\n      }));\n    },\n    // Run validation against the next complete set of model attributes,\n    // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n    _validate: function (attrs, options) {\n      if (!options.validate || !this.validate) return true;\n      attrs = _.extend({}, this.attributes, attrs);\n      var error = this.validationError = this.validate(attrs, options) || null;\n      if (!error) return true;\n      this.trigger('invalid', this, error, _.extend(options, {\n        validationError: error\n      }));\n      return false;\n    }\n  }); // Backbone.Collection\n  // -------------------\n  // If models tend to represent a single row of data, a Backbone Collection is\n  // more analogous to a table full of data ... or a small slice or page of that\n  // table, or a collection of rows that belong together for a particular reason\n  // -- all of the messages in this particular folder, all of the documents\n  // belonging to this particular author, and so on. Collections maintain\n  // indexes of their models, both in order, and for lookup by `id`.\n  // Create a new **Collection**, perhaps to contain a specific type of `model`.\n  // If a `comparator` is specified, the Collection will maintain\n  // its models in sort order, as they're added and removed.\n\n\n  var Collection = Backbone.Collection = function (models, options) {\n    options || (options = {});\n    this.preinitialize.apply(this, arguments);\n    if (options.model) this.model = options.model;\n    if (options.comparator !== void 0) this.comparator = options.comparator;\n\n    this._reset();\n\n    this.initialize.apply(this, arguments);\n    if (models) this.reset(models, _.extend({\n      silent: true\n    }, options));\n  }; // Default options for `Collection#set`.\n\n\n  var setOptions = {\n    add: true,\n    remove: true,\n    merge: true\n  };\n  var addOptions = {\n    add: true,\n    remove: false\n  }; // Splices `insert` into `array` at index `at`.\n\n  var splice = function (array, insert, at) {\n    at = Math.min(Math.max(at, 0), array.length);\n    var tail = Array(array.length - at);\n    var length = insert.length;\n    var i;\n\n    for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n\n    for (i = 0; i < length; i++) array[i + at] = insert[i];\n\n    for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n  }; // Define the Collection's inheritable methods.\n\n\n  _.extend(Collection.prototype, Events, {\n    // The default model for a collection is just a **Backbone.Model**.\n    // This should be overridden in most cases.\n    model: Model,\n    // preinitialize is an empty function by default. You can override it with a function\n    // or object.  preinitialize will run before any instantiation logic is run in the Collection.\n    preinitialize: function () {},\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function () {},\n    // The JSON representation of a Collection is an array of the\n    // models' attributes.\n    toJSON: function (options) {\n      return this.map(function (model) {\n        return model.toJSON(options);\n      });\n    },\n    // Proxy `Backbone.sync` by default.\n    sync: function () {\n      return Backbone.sync.apply(this, arguments);\n    },\n    // Add a model, or list of models to the set. `models` may be Backbone\n    // Models or raw JavaScript objects to be converted to Models, or any\n    // combination of the two.\n    add: function (models, options) {\n      return this.set(models, _.extend({\n        merge: false\n      }, options, addOptions));\n    },\n    // Remove a model, or a list of models from the set.\n    remove: function (models, options) {\n      options = _.extend({}, options);\n      var singular = !_.isArray(models);\n      models = singular ? [models] : models.slice();\n\n      var removed = this._removeModels(models, options);\n\n      if (!options.silent && removed.length) {\n        options.changes = {\n          added: [],\n          merged: [],\n          removed: removed\n        };\n        this.trigger('update', this, options);\n      }\n\n      return singular ? removed[0] : removed;\n    },\n    // Update a collection by `set`-ing a new list of models, adding new ones,\n    // removing models that are no longer present, and merging models that\n    // already exist in the collection, as necessary. Similar to **Model#set**,\n    // the core operation for updating the data contained by the collection.\n    set: function (models, options) {\n      if (models == null) return;\n      options = _.extend({}, setOptions, options);\n\n      if (options.parse && !this._isModel(models)) {\n        models = this.parse(models, options) || [];\n      }\n\n      var singular = !_.isArray(models);\n      models = singular ? [models] : models.slice();\n      var at = options.at;\n      if (at != null) at = +at;\n      if (at > this.length) at = this.length;\n      if (at < 0) at += this.length + 1;\n      var set = [];\n      var toAdd = [];\n      var toMerge = [];\n      var toRemove = [];\n      var modelMap = {};\n      var add = options.add;\n      var merge = options.merge;\n      var remove = options.remove;\n      var sort = false;\n      var sortable = this.comparator && at == null && options.sort !== false;\n      var sortAttr = _.isString(this.comparator) ? this.comparator : null; // Turn bare objects into model references, and prevent invalid models\n      // from being added.\n\n      var model, i;\n\n      for (i = 0; i < models.length; i++) {\n        model = models[i]; // If a duplicate is found, prevent it from being added and\n        // optionally merge it into the existing model.\n\n        var existing = this.get(model);\n\n        if (existing) {\n          if (merge && model !== existing) {\n            var attrs = this._isModel(model) ? model.attributes : model;\n            if (options.parse) attrs = existing.parse(attrs, options);\n            existing.set(attrs, options);\n            toMerge.push(existing);\n            if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n          }\n\n          if (!modelMap[existing.cid]) {\n            modelMap[existing.cid] = true;\n            set.push(existing);\n          }\n\n          models[i] = existing; // If this is a new, valid model, push it to the `toAdd` list.\n        } else if (add) {\n          model = models[i] = this._prepareModel(model, options);\n\n          if (model) {\n            toAdd.push(model);\n\n            this._addReference(model, options);\n\n            modelMap[model.cid] = true;\n            set.push(model);\n          }\n        }\n      } // Remove stale models.\n\n\n      if (remove) {\n        for (i = 0; i < this.length; i++) {\n          model = this.models[i];\n          if (!modelMap[model.cid]) toRemove.push(model);\n        }\n\n        if (toRemove.length) this._removeModels(toRemove, options);\n      } // See if sorting is needed, update `length` and splice in new models.\n\n\n      var orderChanged = false;\n      var replace = !sortable && add && remove;\n\n      if (set.length && replace) {\n        orderChanged = this.length !== set.length || _.some(this.models, function (m, index) {\n          return m !== set[index];\n        });\n        this.models.length = 0;\n        splice(this.models, set, 0);\n        this.length = this.models.length;\n      } else if (toAdd.length) {\n        if (sortable) sort = true;\n        splice(this.models, toAdd, at == null ? this.length : at);\n        this.length = this.models.length;\n      } // Silently sort the collection if appropriate.\n\n\n      if (sort) this.sort({\n        silent: true\n      }); // Unless silenced, it's time to fire all appropriate add/sort/update events.\n\n      if (!options.silent) {\n        for (i = 0; i < toAdd.length; i++) {\n          if (at != null) options.index = at + i;\n          model = toAdd[i];\n          model.trigger('add', model, this, options);\n        }\n\n        if (sort || orderChanged) this.trigger('sort', this, options);\n\n        if (toAdd.length || toRemove.length || toMerge.length) {\n          options.changes = {\n            added: toAdd,\n            removed: toRemove,\n            merged: toMerge\n          };\n          this.trigger('update', this, options);\n        }\n      } // Return the added (or merged) model (or models).\n\n\n      return singular ? models[0] : models;\n    },\n    // When you have more items than you want to add or remove individually,\n    // you can reset the entire set with a new list of models, without firing\n    // any granular `add` or `remove` events. Fires `reset` when finished.\n    // Useful for bulk operations and optimizations.\n    reset: function (models, options) {\n      options = options ? _.clone(options) : {};\n\n      for (var i = 0; i < this.models.length; i++) {\n        this._removeReference(this.models[i], options);\n      }\n\n      options.previousModels = this.models;\n\n      this._reset();\n\n      models = this.add(models, _.extend({\n        silent: true\n      }, options));\n      if (!options.silent) this.trigger('reset', this, options);\n      return models;\n    },\n    // Add a model to the end of the collection.\n    push: function (model, options) {\n      return this.add(model, _.extend({\n        at: this.length\n      }, options));\n    },\n    // Remove a model from the end of the collection.\n    pop: function (options) {\n      var model = this.at(this.length - 1);\n      return this.remove(model, options);\n    },\n    // Add a model to the beginning of the collection.\n    unshift: function (model, options) {\n      return this.add(model, _.extend({\n        at: 0\n      }, options));\n    },\n    // Remove a model from the beginning of the collection.\n    shift: function (options) {\n      var model = this.at(0);\n      return this.remove(model, options);\n    },\n    // Slice out a sub-array of models from the collection.\n    slice: function () {\n      return slice.apply(this.models, arguments);\n    },\n    // Get a model from the set by id, cid, model object with id or cid\n    // properties, or an attributes object that is transformed through modelId.\n    get: function (obj) {\n      if (obj == null) return void 0;\n      return this._byId[obj] || this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] || obj.cid && this._byId[obj.cid];\n    },\n    // Returns `true` if the model is in the collection.\n    has: function (obj) {\n      return this.get(obj) != null;\n    },\n    // Get the model at the given index.\n    at: function (index) {\n      if (index < 0) index += this.length;\n      return this.models[index];\n    },\n    // Return models with matching attributes. Useful for simple cases of\n    // `filter`.\n    where: function (attrs, first) {\n      return this[first ? 'find' : 'filter'](attrs);\n    },\n    // Return the first model with matching attributes. Useful for simple cases\n    // of `find`.\n    findWhere: function (attrs) {\n      return this.where(attrs, true);\n    },\n    // Force the collection to re-sort itself. You don't need to call this under\n    // normal circumstances, as the set will maintain sort order as each item\n    // is added.\n    sort: function (options) {\n      var comparator = this.comparator;\n      if (!comparator) throw new Error('Cannot sort a set without a comparator');\n      options || (options = {});\n      var length = comparator.length;\n      if (_.isFunction(comparator)) comparator = comparator.bind(this); // Run sort based on type of `comparator`.\n\n      if (length === 1 || _.isString(comparator)) {\n        this.models = this.sortBy(comparator);\n      } else {\n        this.models.sort(comparator);\n      }\n\n      if (!options.silent) this.trigger('sort', this, options);\n      return this;\n    },\n    // Pluck an attribute from each model in the collection.\n    pluck: function (attr) {\n      return this.map(attr + '');\n    },\n    // Fetch the default set of models for this collection, resetting the\n    // collection when they arrive. If `reset: true` is passed, the response\n    // data will be passed through the `reset` method instead of `set`.\n    fetch: function (options) {\n      options = _.extend({\n        parse: true\n      }, options);\n      var success = options.success;\n      var collection = this;\n\n      options.success = function (resp) {\n        var method = options.reset ? 'reset' : 'set';\n        collection[method](resp, options);\n        if (success) success.call(options.context, collection, resp, options);\n        collection.trigger('sync', collection, resp, options);\n      };\n\n      wrapError(this, options);\n      return this.sync('read', this, options);\n    },\n    // Create a new instance of a model in this collection. Add the model to the\n    // collection immediately, unless `wait: true` is passed, in which case we\n    // wait for the server to agree.\n    create: function (model, options) {\n      options = options ? _.clone(options) : {};\n      var wait = options.wait;\n      model = this._prepareModel(model, options);\n      if (!model) return false;\n      if (!wait) this.add(model, options);\n      var collection = this;\n      var success = options.success;\n\n      options.success = function (m, resp, callbackOpts) {\n        if (wait) collection.add(m, callbackOpts);\n        if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n      };\n\n      model.save(null, options);\n      return model;\n    },\n    // **parse** converts a response into a list of models to be added to the\n    // collection. The default implementation is just to pass it through.\n    parse: function (resp, options) {\n      return resp;\n    },\n    // Create a new collection with an identical list of models as this one.\n    clone: function () {\n      return new this.constructor(this.models, {\n        model: this.model,\n        comparator: this.comparator\n      });\n    },\n    // Define how to uniquely identify models in the collection.\n    modelId: function (attrs) {\n      return attrs[this.model.prototype.idAttribute || 'id'];\n    },\n    // Get an iterator of all models in this collection.\n    values: function () {\n      return new CollectionIterator(this, ITERATOR_VALUES);\n    },\n    // Get an iterator of all model IDs in this collection.\n    keys: function () {\n      return new CollectionIterator(this, ITERATOR_KEYS);\n    },\n    // Get an iterator of all [ID, model] tuples in this collection.\n    entries: function () {\n      return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n    },\n    // Private method to reset all internal state. Called when the collection\n    // is first initialized or reset.\n    _reset: function () {\n      this.length = 0;\n      this.models = [];\n      this._byId = {};\n    },\n    // Prepare a hash of attributes (or other model) to be added to this\n    // collection.\n    _prepareModel: function (attrs, options) {\n      if (this._isModel(attrs)) {\n        if (!attrs.collection) attrs.collection = this;\n        return attrs;\n      }\n\n      options = options ? _.clone(options) : {};\n      options.collection = this;\n      var model = new this.model(attrs, options);\n      if (!model.validationError) return model;\n      this.trigger('invalid', this, model.validationError, options);\n      return false;\n    },\n    // Internal method called by both remove and set.\n    _removeModels: function (models, options) {\n      var removed = [];\n\n      for (var i = 0; i < models.length; i++) {\n        var model = this.get(models[i]);\n        if (!model) continue;\n        var index = this.indexOf(model);\n        this.models.splice(index, 1);\n        this.length--; // Remove references before triggering 'remove' event to prevent an\n        // infinite loop. #3693\n\n        delete this._byId[model.cid];\n        var id = this.modelId(model.attributes);\n        if (id != null) delete this._byId[id];\n\n        if (!options.silent) {\n          options.index = index;\n          model.trigger('remove', model, this, options);\n        }\n\n        removed.push(model);\n\n        this._removeReference(model, options);\n      }\n\n      return removed;\n    },\n    // Method for checking whether an object should be considered a model for\n    // the purposes of adding to the collection.\n    _isModel: function (model) {\n      return model instanceof Model;\n    },\n    // Internal method to create a model's ties to a collection.\n    _addReference: function (model, options) {\n      this._byId[model.cid] = model;\n      var id = this.modelId(model.attributes);\n      if (id != null) this._byId[id] = model;\n      model.on('all', this._onModelEvent, this);\n    },\n    // Internal method to sever a model's ties to a collection.\n    _removeReference: function (model, options) {\n      delete this._byId[model.cid];\n      var id = this.modelId(model.attributes);\n      if (id != null) delete this._byId[id];\n      if (this === model.collection) delete model.collection;\n      model.off('all', this._onModelEvent, this);\n    },\n    // Internal method called every time a model in the set fires an event.\n    // Sets need to update their indexes when models change ids. All other\n    // events simply proxy through. \"add\" and \"remove\" events that originate\n    // in other collections are ignored.\n    _onModelEvent: function (event, model, collection, options) {\n      if (model) {\n        if ((event === 'add' || event === 'remove') && collection !== this) return;\n        if (event === 'destroy') this.remove(model, options);\n\n        if (event === 'change') {\n          var prevId = this.modelId(model.previousAttributes());\n          var id = this.modelId(model.attributes);\n\n          if (prevId !== id) {\n            if (prevId != null) delete this._byId[prevId];\n            if (id != null) this._byId[id] = model;\n          }\n        }\n      }\n\n      this.trigger.apply(this, arguments);\n    }\n  }); // Defining an @@iterator method implements JavaScript's Iterable protocol.\n  // In modern ES2015 browsers, this value is found at Symbol.iterator.\n\n  /* global Symbol */\n\n\n  var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n\n  if ($$iterator) {\n    Collection.prototype[$$iterator] = Collection.prototype.values;\n  } // CollectionIterator\n  // ------------------\n  // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n  // use of `for of` loops in modern browsers and interoperation between\n  // Backbone.Collection and other JavaScript functions and third-party libraries\n  // which can operate on Iterables.\n\n\n  var CollectionIterator = function (collection, kind) {\n    this._collection = collection;\n    this._kind = kind;\n    this._index = 0;\n  }; // This \"enum\" defines the three possible kinds of values which can be emitted\n  // by a CollectionIterator that correspond to the values(), keys() and entries()\n  // methods on Collection, respectively.\n\n\n  var ITERATOR_VALUES = 1;\n  var ITERATOR_KEYS = 2;\n  var ITERATOR_KEYSVALUES = 3; // All Iterators should themselves be Iterable.\n\n  if ($$iterator) {\n    CollectionIterator.prototype[$$iterator] = function () {\n      return this;\n    };\n  }\n\n  CollectionIterator.prototype.next = function () {\n    if (this._collection) {\n      // Only continue iterating if the iterated collection is long enough.\n      if (this._index < this._collection.length) {\n        var model = this._collection.at(this._index);\n\n        this._index++; // Construct a value depending on what kind of values should be iterated.\n\n        var value;\n\n        if (this._kind === ITERATOR_VALUES) {\n          value = model;\n        } else {\n          var id = this._collection.modelId(model.attributes);\n\n          if (this._kind === ITERATOR_KEYS) {\n            value = id;\n          } else {\n            // ITERATOR_KEYSVALUES\n            value = [id, model];\n          }\n        }\n\n        return {\n          value: value,\n          done: false\n        };\n      } // Once exhausted, remove the reference to the collection so future\n      // calls to the next method always return done.\n\n\n      this._collection = void 0;\n    }\n\n    return {\n      value: void 0,\n      done: true\n    };\n  }; // Backbone.View\n  // -------------\n  // Backbone Views are almost more convention than they are actual code. A View\n  // is simply a JavaScript object that represents a logical chunk of UI in the\n  // DOM. This might be a single item, an entire list, a sidebar or panel, or\n  // even the surrounding frame which wraps your whole app. Defining a chunk of\n  // UI as a **View** allows you to define your DOM events declaratively, without\n  // having to worry about render order ... and makes it easy for the view to\n  // react to specific changes in the state of your models.\n  // Creating a Backbone.View creates its initial element outside of the DOM,\n  // if an existing element is not provided...\n\n\n  var View = Backbone.View = function (options) {\n    this.cid = _.uniqueId('view');\n    this.preinitialize.apply(this, arguments);\n\n    _.extend(this, _.pick(options, viewOptions));\n\n    this._ensureElement();\n\n    this.initialize.apply(this, arguments);\n  }; // Cached regex to split keys for `delegate`.\n\n\n  var delegateEventSplitter = /^(\\S+)\\s*(.*)$/; // List of view options to be set as properties.\n\n  var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; // Set up all inheritable **Backbone.View** properties and methods.\n\n  _.extend(View.prototype, Events, {\n    // The default `tagName` of a View's element is `\"div\"`.\n    tagName: 'div',\n    // jQuery delegate for element lookup, scoped to DOM elements within the\n    // current view. This should be preferred to global lookups where possible.\n    $: function (selector) {\n      return this.$el.find(selector);\n    },\n    // preinitialize is an empty function by default. You can override it with a function\n    // or object.  preinitialize will run before any instantiation logic is run in the View\n    preinitialize: function () {},\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function () {},\n    // **render** is the core function that your view should override, in order\n    // to populate its element (`this.el`), with the appropriate HTML. The\n    // convention is for **render** to always return `this`.\n    render: function () {\n      return this;\n    },\n    // Remove this view by taking the element out of the DOM, and removing any\n    // applicable Backbone.Events listeners.\n    remove: function () {\n      this._removeElement();\n\n      this.stopListening();\n      return this;\n    },\n    // Remove this view's element from the document and all event listeners\n    // attached to it. Exposed for subclasses using an alternative DOM\n    // manipulation API.\n    _removeElement: function () {\n      this.$el.remove();\n    },\n    // Change the view's element (`this.el` property) and re-delegate the\n    // view's events on the new element.\n    setElement: function (element) {\n      this.undelegateEvents();\n\n      this._setElement(element);\n\n      this.delegateEvents();\n      return this;\n    },\n    // Creates the `this.el` and `this.$el` references for this view using the\n    // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n    // context or an element. Subclasses can override this to utilize an\n    // alternative DOM manipulation API and are only required to set the\n    // `this.el` property.\n    _setElement: function (el) {\n      this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n      this.el = this.$el[0];\n    },\n    // Set callbacks, where `this.events` is a hash of\n    //\n    // *{\"event selector\": \"callback\"}*\n    //\n    //     {\n    //       'mousedown .title':  'edit',\n    //       'click .button':     'save',\n    //       'click .open':       function(e) { ... }\n    //     }\n    //\n    // pairs. Callbacks will be bound to the view, with `this` set properly.\n    // Uses event delegation for efficiency.\n    // Omitting the selector binds the event to `this.el`.\n    delegateEvents: function (events) {\n      events || (events = _.result(this, 'events'));\n      if (!events) return this;\n      this.undelegateEvents();\n\n      for (var key in events) {\n        var method = events[key];\n        if (!_.isFunction(method)) method = this[method];\n        if (!method) continue;\n        var match = key.match(delegateEventSplitter);\n        this.delegate(match[1], match[2], method.bind(this));\n      }\n\n      return this;\n    },\n    // Add a single event listener to the view's element (or a child element\n    // using `selector`). This only works for delegate-able events: not `focus`,\n    // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n    delegate: function (eventName, selector, listener) {\n      this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n      return this;\n    },\n    // Clears all callbacks previously bound to the view by `delegateEvents`.\n    // You usually don't need to use this, but may wish to if you have multiple\n    // Backbone views attached to the same DOM element.\n    undelegateEvents: function () {\n      if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n      return this;\n    },\n    // A finer-grained `undelegateEvents` for removing a single delegated event.\n    // `selector` and `listener` are both optional.\n    undelegate: function (eventName, selector, listener) {\n      this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n      return this;\n    },\n    // Produces a DOM element to be assigned to your view. Exposed for\n    // subclasses using an alternative DOM manipulation API.\n    _createElement: function (tagName) {\n      return document.createElement(tagName);\n    },\n    // Ensure that the View has a DOM element to render into.\n    // If `this.el` is a string, pass it through `$()`, take the first\n    // matching element, and re-assign it to `el`. Otherwise, create\n    // an element from the `id`, `className` and `tagName` properties.\n    _ensureElement: function () {\n      if (!this.el) {\n        var attrs = _.extend({}, _.result(this, 'attributes'));\n\n        if (this.id) attrs.id = _.result(this, 'id');\n        if (this.className) attrs['class'] = _.result(this, 'className');\n        this.setElement(this._createElement(_.result(this, 'tagName')));\n\n        this._setAttributes(attrs);\n      } else {\n        this.setElement(_.result(this, 'el'));\n      }\n    },\n    // Set attributes from a hash on this view's element.  Exposed for\n    // subclasses using an alternative DOM manipulation API.\n    _setAttributes: function (attributes) {\n      this.$el.attr(attributes);\n    }\n  }); // Proxy Backbone class methods to Underscore functions, wrapping the model's\n  // `attributes` object or collection's `models` array behind the scenes.\n  //\n  // collection.filter(function(model) { return model.get('age') > 10 });\n  // collection.each(this.addView);\n  //\n  // `Function#apply` can be slow so we use the method's arg count, if we know it.\n\n\n  var addMethod = function (base, length, method, attribute) {\n    switch (length) {\n      case 1:\n        return function () {\n          return base[method](this[attribute]);\n        };\n\n      case 2:\n        return function (value) {\n          return base[method](this[attribute], value);\n        };\n\n      case 3:\n        return function (iteratee, context) {\n          return base[method](this[attribute], cb(iteratee, this), context);\n        };\n\n      case 4:\n        return function (iteratee, defaultVal, context) {\n          return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n        };\n\n      default:\n        return function () {\n          var args = slice.call(arguments);\n          args.unshift(this[attribute]);\n          return base[method].apply(base, args);\n        };\n    }\n  };\n\n  var addUnderscoreMethods = function (Class, base, methods, attribute) {\n    _.each(methods, function (length, method) {\n      if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n    });\n  }; // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n\n\n  var cb = function (iteratee, instance) {\n    if (_.isFunction(iteratee)) return iteratee;\n    if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n    if (_.isString(iteratee)) return function (model) {\n      return model.get(iteratee);\n    };\n    return iteratee;\n  };\n\n  var modelMatcher = function (attrs) {\n    var matcher = _.matches(attrs);\n\n    return function (model) {\n      return matcher(model.attributes);\n    };\n  }; // Underscore methods that we want to implement on the Collection.\n  // 90% of the core usefulness of Backbone Collections is actually implemented\n  // right here:\n\n\n  var collectionMethods = {\n    forEach: 3,\n    each: 3,\n    map: 3,\n    collect: 3,\n    reduce: 0,\n    foldl: 0,\n    inject: 0,\n    reduceRight: 0,\n    foldr: 0,\n    find: 3,\n    detect: 3,\n    filter: 3,\n    select: 3,\n    reject: 3,\n    every: 3,\n    all: 3,\n    some: 3,\n    any: 3,\n    include: 3,\n    includes: 3,\n    contains: 3,\n    invoke: 0,\n    max: 3,\n    min: 3,\n    toArray: 1,\n    size: 1,\n    first: 3,\n    head: 3,\n    take: 3,\n    initial: 3,\n    rest: 3,\n    tail: 3,\n    drop: 3,\n    last: 3,\n    without: 0,\n    difference: 0,\n    indexOf: 3,\n    shuffle: 1,\n    lastIndexOf: 3,\n    isEmpty: 1,\n    chain: 1,\n    sample: 3,\n    partition: 3,\n    groupBy: 3,\n    countBy: 3,\n    sortBy: 3,\n    indexBy: 3,\n    findIndex: 3,\n    findLastIndex: 3\n  }; // Underscore methods that we want to implement on the Model, mapped to the\n  // number of arguments they take.\n\n  var modelMethods = {\n    keys: 1,\n    values: 1,\n    pairs: 1,\n    invert: 1,\n    pick: 0,\n    omit: 0,\n    chain: 1,\n    isEmpty: 1\n  }; // Mix in each Underscore method as a proxy to `Collection#models`.\n\n  _.each([[Collection, collectionMethods, 'models'], [Model, modelMethods, 'attributes']], function (config) {\n    var Base = config[0],\n        methods = config[1],\n        attribute = config[2];\n\n    Base.mixin = function (obj) {\n      var mappings = _.reduce(_.functions(obj), function (memo, name) {\n        memo[name] = 0;\n        return memo;\n      }, {});\n\n      addUnderscoreMethods(Base, obj, mappings, attribute);\n    };\n\n    addUnderscoreMethods(Base, _, methods, attribute);\n  }); // Backbone.sync\n  // -------------\n  // Override this function to change the manner in which Backbone persists\n  // models to the server. You will be passed the type of request, and the\n  // model in question. By default, makes a RESTful Ajax request\n  // to the model's `url()`. Some possible customizations could be:\n  //\n  // * Use `setTimeout` to batch rapid-fire updates into a single request.\n  // * Send up the models as XML instead of JSON.\n  // * Persist models via WebSockets instead of Ajax.\n  //\n  // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n  // as `POST`, with a `_method` parameter containing the true HTTP method,\n  // as well as all requests with the body as `application/x-www-form-urlencoded`\n  // instead of `application/json` with the model in a param named `model`.\n  // Useful when interfacing with server-side languages like **PHP** that make\n  // it difficult to read the body of `PUT` requests.\n\n\n  Backbone.sync = function (method, model, options) {\n    var type = methodMap[method]; // Default options, unless specified.\n\n    _.defaults(options || (options = {}), {\n      emulateHTTP: Backbone.emulateHTTP,\n      emulateJSON: Backbone.emulateJSON\n    }); // Default JSON-request options.\n\n\n    var params = {\n      type: type,\n      dataType: 'json'\n    }; // Ensure that we have a URL.\n\n    if (!options.url) {\n      params.url = _.result(model, 'url') || urlError();\n    } // Ensure that we have the appropriate request data.\n\n\n    if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n      params.contentType = 'application/json';\n      params.data = JSON.stringify(options.attrs || model.toJSON(options));\n    } // For older servers, emulate JSON by encoding the request into an HTML-form.\n\n\n    if (options.emulateJSON) {\n      params.contentType = 'application/x-www-form-urlencoded';\n      params.data = params.data ? {\n        model: params.data\n      } : {};\n    } // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n    // And an `X-HTTP-Method-Override` header.\n\n\n    if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n      params.type = 'POST';\n      if (options.emulateJSON) params.data._method = type;\n      var beforeSend = options.beforeSend;\n\n      options.beforeSend = function (xhr) {\n        xhr.setRequestHeader('X-HTTP-Method-Override', type);\n        if (beforeSend) return beforeSend.apply(this, arguments);\n      };\n    } // Don't process data on a non-GET request.\n\n\n    if (params.type !== 'GET' && !options.emulateJSON) {\n      params.processData = false;\n    } // Pass along `textStatus` and `errorThrown` from jQuery.\n\n\n    var error = options.error;\n\n    options.error = function (xhr, textStatus, errorThrown) {\n      options.textStatus = textStatus;\n      options.errorThrown = errorThrown;\n      if (error) error.call(options.context, xhr, textStatus, errorThrown);\n    }; // Make the request, allowing the user to override any Ajax options.\n\n\n    var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n    model.trigger('request', model, xhr, options);\n    return xhr;\n  }; // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n\n\n  var methodMap = {\n    create: 'POST',\n    update: 'PUT',\n    patch: 'PATCH',\n    delete: 'DELETE',\n    read: 'GET'\n  }; // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n  // Override this if you'd like to use a different library.\n\n  Backbone.ajax = function () {\n    return Backbone.$.ajax.apply(Backbone.$, arguments);\n  }; // Backbone.Router\n  // ---------------\n  // Routers map faux-URLs to actions, and fire events when routes are\n  // matched. Creating a new one sets its `routes` hash, if not set statically.\n\n\n  var Router = Backbone.Router = function (options) {\n    options || (options = {});\n    this.preinitialize.apply(this, arguments);\n    if (options.routes) this.routes = options.routes;\n\n    this._bindRoutes();\n\n    this.initialize.apply(this, arguments);\n  }; // Cached regular expressions for matching named param parts and splatted\n  // parts of route strings.\n\n\n  var optionalParam = /\\((.*?)\\)/g;\n  var namedParam = /(\\(\\?)?:\\w+/g;\n  var splatParam = /\\*\\w+/g;\n  var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g; // Set up all inheritable **Backbone.Router** properties and methods.\n\n  _.extend(Router.prototype, Events, {\n    // preinitialize is an empty function by default. You can override it with a function\n    // or object.  preinitialize will run before any instantiation logic is run in the Router.\n    preinitialize: function () {},\n    // Initialize is an empty function by default. Override it with your own\n    // initialization logic.\n    initialize: function () {},\n    // Manually bind a single named route to a callback. For example:\n    //\n    //     this.route('search/:query/p:num', 'search', function(query, num) {\n    //       ...\n    //     });\n    //\n    route: function (route, name, callback) {\n      if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n\n      if (_.isFunction(name)) {\n        callback = name;\n        name = '';\n      }\n\n      if (!callback) callback = this[name];\n      var router = this;\n      Backbone.history.route(route, function (fragment) {\n        var args = router._extractParameters(route, fragment);\n\n        if (router.execute(callback, args, name) !== false) {\n          router.trigger.apply(router, ['route:' + name].concat(args));\n          router.trigger('route', name, args);\n          Backbone.history.trigger('route', router, name, args);\n        }\n      });\n      return this;\n    },\n    // Execute a route handler with the provided parameters.  This is an\n    // excellent place to do pre-route setup or post-route cleanup.\n    execute: function (callback, args, name) {\n      if (callback) callback.apply(this, args);\n    },\n    // Simple proxy to `Backbone.history` to save a fragment into the history.\n    navigate: function (fragment, options) {\n      Backbone.history.navigate(fragment, options);\n      return this;\n    },\n    // Bind all defined routes to `Backbone.history`. We have to reverse the\n    // order of the routes here to support behavior where the most general\n    // routes can be defined at the bottom of the route map.\n    _bindRoutes: function () {\n      if (!this.routes) return;\n      this.routes = _.result(this, 'routes');\n\n      var route,\n          routes = _.keys(this.routes);\n\n      while ((route = routes.pop()) != null) {\n        this.route(route, this.routes[route]);\n      }\n    },\n    // Convert a route string into a regular expression, suitable for matching\n    // against the current location hash.\n    _routeToRegExp: function (route) {\n      route = route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, function (match, optional) {\n        return optional ? match : '([^/?]+)';\n      }).replace(splatParam, '([^?]*?)');\n      return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n    },\n    // Given a route, and a URL fragment that it matches, return the array of\n    // extracted decoded parameters. Empty or unmatched parameters will be\n    // treated as `null` to normalize cross-browser behavior.\n    _extractParameters: function (route, fragment) {\n      var params = route.exec(fragment).slice(1);\n      return _.map(params, function (param, i) {\n        // Don't decode the search params.\n        if (i === params.length - 1) return param || null;\n        return param ? decodeURIComponent(param) : null;\n      });\n    }\n  }); // Backbone.History\n  // ----------------\n  // Handles cross-browser history management, based on either\n  // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n  // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n  // and URL fragments. If the browser supports neither (old IE, natch),\n  // falls back to polling.\n\n\n  var History = Backbone.History = function () {\n    this.handlers = [];\n    this.checkUrl = this.checkUrl.bind(this); // Ensure that `History` can be used outside of the browser.\n\n    if (typeof window !== 'undefined') {\n      this.location = window.location;\n      this.history = window.history;\n    }\n  }; // Cached regex for stripping a leading hash/slash and trailing space.\n\n\n  var routeStripper = /^[#\\/]|\\s+$/g; // Cached regex for stripping leading and trailing slashes.\n\n  var rootStripper = /^\\/+|\\/+$/g; // Cached regex for stripping urls of hash.\n\n  var pathStripper = /#.*$/; // Has the history handling already been started?\n\n  History.started = false; // Set up all inheritable **Backbone.History** properties and methods.\n\n  _.extend(History.prototype, Events, {\n    // The default interval to poll for hash changes, if necessary, is\n    // twenty times a second.\n    interval: 50,\n    // Are we at the app root?\n    atRoot: function () {\n      var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n      return path === this.root && !this.getSearch();\n    },\n    // Does the pathname match the root?\n    matchRoot: function () {\n      var path = this.decodeFragment(this.location.pathname);\n      var rootPath = path.slice(0, this.root.length - 1) + '/';\n      return rootPath === this.root;\n    },\n    // Unicode characters in `location.pathname` are percent encoded so they're\n    // decoded for comparison. `%25` should not be decoded since it may be part\n    // of an encoded parameter.\n    decodeFragment: function (fragment) {\n      return decodeURI(fragment.replace(/%25/g, '%2525'));\n    },\n    // In IE6, the hash fragment and search params are incorrect if the\n    // fragment contains `?`.\n    getSearch: function () {\n      var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n      return match ? match[0] : '';\n    },\n    // Gets the true hash value. Cannot use location.hash directly due to bug\n    // in Firefox where location.hash will always be decoded.\n    getHash: function (window) {\n      var match = (window || this).location.href.match(/#(.*)$/);\n      return match ? match[1] : '';\n    },\n    // Get the pathname and search params, without the root.\n    getPath: function () {\n      var path = this.decodeFragment(this.location.pathname + this.getSearch()).slice(this.root.length - 1);\n      return path.charAt(0) === '/' ? path.slice(1) : path;\n    },\n    // Get the cross-browser normalized URL fragment from the path or hash.\n    getFragment: function (fragment) {\n      if (fragment == null) {\n        if (this._usePushState || !this._wantsHashChange) {\n          fragment = this.getPath();\n        } else {\n          fragment = this.getHash();\n        }\n      }\n\n      return fragment.replace(routeStripper, '');\n    },\n    // Start the hash change handling, returning `true` if the current URL matches\n    // an existing route, and `false` otherwise.\n    start: function (options) {\n      if (History.started) throw new Error('Backbone.history has already been started');\n      History.started = true; // Figure out the initial configuration. Do we need an iframe?\n      // Is pushState desired ... is it available?\n\n      this.options = _.extend({\n        root: '/'\n      }, this.options, options);\n      this.root = this.options.root;\n      this._wantsHashChange = this.options.hashChange !== false;\n      this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n      this._useHashChange = this._wantsHashChange && this._hasHashChange;\n      this._wantsPushState = !!this.options.pushState;\n      this._hasPushState = !!(this.history && this.history.pushState);\n      this._usePushState = this._wantsPushState && this._hasPushState;\n      this.fragment = this.getFragment(); // Normalize root to always include a leading and trailing slash.\n\n      this.root = ('/' + this.root + '/').replace(rootStripper, '/'); // Transition from hashChange to pushState or vice versa if both are\n      // requested.\n\n      if (this._wantsHashChange && this._wantsPushState) {\n        // If we've started off with a route from a `pushState`-enabled\n        // browser, but we're currently in a browser that doesn't support it...\n        if (!this._hasPushState && !this.atRoot()) {\n          var rootPath = this.root.slice(0, -1) || '/';\n          this.location.replace(rootPath + '#' + this.getPath()); // Return immediately as browser will do redirect to new url\n\n          return true; // Or if we've started out with a hash-based route, but we're currently\n          // in a browser where it could be `pushState`-based instead...\n        } else if (this._hasPushState && this.atRoot()) {\n          this.navigate(this.getHash(), {\n            replace: true\n          });\n        }\n      } // Proxy an iframe to handle location events if the browser doesn't\n      // support the `hashchange` event, HTML5 history, or the user wants\n      // `hashChange` but not `pushState`.\n\n\n      if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n        this.iframe = document.createElement('iframe');\n        this.iframe.src = 'javascript:0';\n        this.iframe.style.display = 'none';\n        this.iframe.tabIndex = -1;\n        var body = document.body; // Using `appendChild` will throw on IE < 9 if the document is not ready.\n\n        var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n        iWindow.document.open();\n        iWindow.document.close();\n        iWindow.location.hash = '#' + this.fragment;\n      } // Add a cross-platform `addEventListener` shim for older browsers.\n\n\n      var addEventListener = window.addEventListener || function (eventName, listener) {\n        return attachEvent('on' + eventName, listener);\n      }; // Depending on whether we're using pushState or hashes, and whether\n      // 'onhashchange' is supported, determine how we check the URL state.\n\n\n      if (this._usePushState) {\n        addEventListener('popstate', this.checkUrl, false);\n      } else if (this._useHashChange && !this.iframe) {\n        addEventListener('hashchange', this.checkUrl, false);\n      } else if (this._wantsHashChange) {\n        this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n      }\n\n      if (!this.options.silent) return this.loadUrl();\n    },\n    // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n    // but possibly useful for unit testing Routers.\n    stop: function () {\n      // Add a cross-platform `removeEventListener` shim for older browsers.\n      var removeEventListener = window.removeEventListener || function (eventName, listener) {\n        return detachEvent('on' + eventName, listener);\n      }; // Remove window listeners.\n\n\n      if (this._usePushState) {\n        removeEventListener('popstate', this.checkUrl, false);\n      } else if (this._useHashChange && !this.iframe) {\n        removeEventListener('hashchange', this.checkUrl, false);\n      } // Clean up the iframe if necessary.\n\n\n      if (this.iframe) {\n        document.body.removeChild(this.iframe);\n        this.iframe = null;\n      } // Some environments will throw when clearing an undefined interval.\n\n\n      if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n      History.started = false;\n    },\n    // Add a route to be tested when the fragment changes. Routes added later\n    // may override previous routes.\n    route: function (route, callback) {\n      this.handlers.unshift({\n        route: route,\n        callback: callback\n      });\n    },\n    // Checks the current URL to see if it has changed, and if it has,\n    // calls `loadUrl`, normalizing across the hidden iframe.\n    checkUrl: function (e) {\n      var current = this.getFragment(); // If the user pressed the back button, the iframe's hash will have\n      // changed and we should use that for comparison.\n\n      if (current === this.fragment && this.iframe) {\n        current = this.getHash(this.iframe.contentWindow);\n      }\n\n      if (current === this.fragment) return false;\n      if (this.iframe) this.navigate(current);\n      this.loadUrl();\n    },\n    // Attempt to load the current URL fragment. If a route succeeds with a\n    // match, returns `true`. If no defined routes matches the fragment,\n    // returns `false`.\n    loadUrl: function (fragment) {\n      // If the root doesn't match, no routes can match either.\n      if (!this.matchRoot()) return false;\n      fragment = this.fragment = this.getFragment(fragment);\n      return _.some(this.handlers, function (handler) {\n        if (handler.route.test(fragment)) {\n          handler.callback(fragment);\n          return true;\n        }\n      });\n    },\n    // Save a fragment into the hash history, or replace the URL state if the\n    // 'replace' option is passed. You are responsible for properly URL-encoding\n    // the fragment in advance.\n    //\n    // The options object can contain `trigger: true` if you wish to have the\n    // route callback be fired (not usually desirable), or `replace: true`, if\n    // you wish to modify the current URL without adding an entry to the history.\n    navigate: function (fragment, options) {\n      if (!History.started) return false;\n      if (!options || options === true) options = {\n        trigger: !!options\n      }; // Normalize the fragment.\n\n      fragment = this.getFragment(fragment || ''); // Don't include a trailing slash on the root.\n\n      var rootPath = this.root;\n\n      if (fragment === '' || fragment.charAt(0) === '?') {\n        rootPath = rootPath.slice(0, -1) || '/';\n      }\n\n      var url = rootPath + fragment; // Strip the fragment of the query and hash for matching.\n\n      fragment = fragment.replace(pathStripper, ''); // Decode for matching.\n\n      var decodedFragment = this.decodeFragment(fragment);\n      if (this.fragment === decodedFragment) return;\n      this.fragment = decodedFragment; // If pushState is available, we use it to set the fragment as a real URL.\n\n      if (this._usePushState) {\n        this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url); // If hash changes haven't been explicitly disabled, update the hash\n        // fragment to store history.\n      } else if (this._wantsHashChange) {\n        this._updateHash(this.location, fragment, options.replace);\n\n        if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n          var iWindow = this.iframe.contentWindow; // Opening and closing the iframe tricks IE7 and earlier to push a\n          // history entry on hash-tag change.  When replace is true, we don't\n          // want this.\n\n          if (!options.replace) {\n            iWindow.document.open();\n            iWindow.document.close();\n          }\n\n          this._updateHash(iWindow.location, fragment, options.replace);\n        } // If you've told us that you explicitly don't want fallback hashchange-\n        // based history, then `navigate` becomes a page refresh.\n\n      } else {\n        return this.location.assign(url);\n      }\n\n      if (options.trigger) return this.loadUrl(fragment);\n    },\n    // Update the hash location, either replacing the current entry, or adding\n    // a new one to the browser history.\n    _updateHash: function (location, fragment, replace) {\n      if (replace) {\n        var href = location.href.replace(/(javascript:|#).*$/, '');\n        location.replace(href + '#' + fragment);\n      } else {\n        // Some browsers require that `hash` contains a leading #.\n        location.hash = '#' + fragment;\n      }\n    }\n  }); // Create the default Backbone.history.\n\n\n  Backbone.history = new History(); // Helpers\n  // -------\n  // Helper function to correctly set up the prototype chain for subclasses.\n  // Similar to `goog.inherits`, but uses a hash of prototype properties and\n  // class properties to be extended.\n\n  var extend = function (protoProps, staticProps) {\n    var parent = this;\n    var child; // The constructor function for the new subclass is either defined by you\n    // (the \"constructor\" property in your `extend` definition), or defaulted\n    // by us to simply call the parent constructor.\n\n    if (protoProps && _.has(protoProps, 'constructor')) {\n      child = protoProps.constructor;\n    } else {\n      child = function () {\n        return parent.apply(this, arguments);\n      };\n    } // Add static properties to the constructor function, if supplied.\n\n\n    _.extend(child, parent, staticProps); // Set the prototype chain to inherit from `parent`, without calling\n    // `parent`'s constructor function and add the prototype properties.\n\n\n    child.prototype = _.create(parent.prototype, protoProps);\n    child.prototype.constructor = child; // Set a convenience property in case the parent's prototype is needed\n    // later.\n\n    child.__super__ = parent.prototype;\n    return child;\n  }; // Set up inheritance for the model, collection, router, view and history.\n\n\n  Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend; // Throw an error when a URL is needed, and none is supplied.\n\n  var urlError = function () {\n    throw new Error('A \"url\" property or function must be specified');\n  }; // Wrap an optional error callback with a fallback error event.\n\n\n  var wrapError = function (model, options) {\n    var error = options.error;\n\n    options.error = function (resp) {\n      if (error) error.call(options.context, model, resp, options);\n      model.trigger('error', model, resp, options);\n    };\n  };\n\n  return Backbone;\n});\n}(backbone, backbone.exports));\n\nvar Backbone = backbone.exports;\n\nexport { Backbone as default };\n","import oktaUnderscore from '../util/underscore-wrapper.js';\nimport Backbone from '../vendor/lib/backbone.js';\n\nvar STATE = '__STATE__';\nvar FETCH_DATA = 'FETCH_DATA';\nvar PAGINATION_DATA = 'PAGINATION_DATA';\nvar DEFAULT_PARAMS = 'DEFAULT_PARAMS';\nvar LINK_BY_HEADER = 'LINK_BY_HEADER';\nvar XHR = 'XHR'; // ################################################\n// # Source: https://gist.github.com/deiu/9335803\n// ################################################\n// unquote string (utility)\n\nfunction unquote(value) {\n  if (value.charAt(0) === '\"' && value.charAt(value.length - 1) === '\"') {\n    return value.substring(1, value.length - 1);\n  }\n\n  return value;\n}\n/*\nparse a Link header\nLink:<https://example.org/.meta>; rel=meta\nvar r = parseLinkHeader(xhr.getResponseHeader('Link');\nr['meta']['href'] outputs https://example.org/.meta\n*/\n\n\nfunction parseLinkHeader(header) {\n  /* eslint max-statements: 0 */\n  var linkexp = /<[^>]*>\\s*(\\s*;\\s*[^()<>@,;:\"/[\\]?={} \\t]+=(([^()<>@,;:\"/[\\]?={} \\t]+)|(\"[^\"]*\")))*(,|$)/g;\n  var paramexp = /[^()<>@,;:\"/[\\]?={} \\t]+=(([^()<>@,;:\"/[\\]?={} \\t]+)|(\"[^\"]*\"))/g;\n  var matches = header.match(linkexp);\n  var rels = {};\n\n  for (var i = 0; i < matches.length; i++) {\n    var split = matches[i].split('>');\n    var href = split[0].substring(1);\n    var link = {\n      href: undefined,\n      rel: undefined\n    };\n    link.href = href;\n    var s = split[1].match(paramexp);\n\n    for (var j = 0; j < s.length; j++) {\n      var paramsplit = s[j].split('=');\n      var name = paramsplit[0];\n      link[name] = unquote(paramsplit[1]);\n    }\n\n    if (link.rel !== undefined) {\n      rels[link.rel] = link;\n    }\n  }\n\n  return rels;\n}\n/*\n * Sets the next page URL on the collection from link headers\n * See: http://www.rfc-editor.org/rfc/rfc5988.txt\n *\n * This method is looking for a link header with `rel=\"next\"`\n * An set's it as the next page's URL.\n *\n * If it doesn't find a next page, and current page is set by a link header\n * it assumes we are at the last page and deletes the current `next`\n */\n\n\nfunction setLinkHeadersPagination(collection, xhr) {\n  try {\n    var links = parseLinkHeader(xhr.getResponseHeader('link'));\n    collection[STATE].set(LINK_BY_HEADER, true);\n    collection.setPagination(links['next'].href);\n  } catch (e) {\n    if (collection[STATE].get(LINK_BY_HEADER)) {\n      collection.setPagination(null);\n    }\n  }\n}\n\nfunction parseQuery(url) {\n  var params = {};\n  var rawQueryStr = url && url.split('?')[1];\n  var queryString = rawQueryStr && decodeURIComponent(rawQueryStr.split('#')[0]).replace(/\\+/g, ' ');\n  var props = queryString ? queryString.split('&') : [];\n\n  for (var i = 0; i < props.length; i++) {\n    var parts = props[i].split('=');\n    params[parts.shift()] = parts.join('=');\n  }\n\n  return params;\n} // ################################################\n// # /Source\n// ################################################\n//\n\n\nconst collectionProps =\n/** @lends src/framework/Collection.prototype */\n{\n  /**\n   * Default fetch parameters\n   * @type {Object|Function}\n   */\n  params: {},\n  preinitialize: function (models, options) {\n    const state = new Backbone.Model();\n\n    const defaultParams = oktaUnderscore.defaults(options && options.params || {}, oktaUnderscore.result(this, 'params') || {});\n\n    state.set(DEFAULT_PARAMS, defaultParams);\n    this[STATE] = state; // Adds support for child class to convert to ES6 Class.\n    // After conversion, `this.model` has to be a pure function to return Model Class.\n    // The changes below is trying to distinguish the ambiguity between a Class and normal function,\n    // as both are JavaScript function essentially.\n    // There are three ways to define class for `this.model`\n    // 1. Object properties: `model: BaseModel.extend({..})`\n    // 2. Function constructor:\n    // See example from\n    // - appversions/src/models/CustomType.js\n    // - appversions/src/models/EnumType.js\n    // - appversions/src/models/SignOnMode.js\n    // - authn-factors/src/models/Feature.js\n    // - shared/src/models/SamlAttribute.js\n    // 3. Function that returns a class.\n    //    model: function() { return BaseModel.extend({..}); }\n    //\n    // option 1 and 2 exists in code base today\n    // option 3 is introduced to support child class to convert to ES6 class.\n    // TODO: think of remove following check\n    // The reason for `this.model !== Backbone.Model` is because `this.model` is default to `Backbone.Model`\n    // set at Backbone.Collection.\n\n    if (oktaUnderscore.isFunction(this.model) && this.model.length === 0 && this.model.isCourageModel !== true) {\n      this.model = oktaUnderscore.result(this, 'model');\n    }\n\n    Backbone.Collection.prototype.preinitialize.apply(this, arguments);\n  },\n\n  /**\n   * See [Backbone Collection.sync](http://backbonejs.org/#Collection-sync).\n   */\n  sync: function (method, collection, options) {\n    var self = this;\n    var success = options.success;\n\n    options.success = function (resp, status, xhr) {\n      // its important to set the pagination data *before* we call the success callback\n      // because we want the pagination data to be ready when the collection triggers the `sync` event\n      setLinkHeadersPagination(self, xhr);\n      success.apply(null, arguments);\n    };\n\n    return Backbone.Collection.prototype.sync.call(this, method, collection, options);\n  },\n\n  /**\n   * See [Backbone Collection.fetch](http://backbonejs.org/#Collection-fetch).\n   */\n  fetch: function (options) {\n    options || (options = {});\n    var state = this[STATE];\n    var xhr = state.get(XHR);\n    options.data = oktaUnderscore.extend({}, state.get(DEFAULT_PARAMS), options.data || {});\n    options.fromFetch = true;\n    state.set(FETCH_DATA, options.data);\n\n    if (xhr && xhr.abort && options.abort !== false) {\n      xhr.abort();\n    }\n\n    xhr = Backbone.Collection.prototype.fetch.call(this, options);\n    state.set(XHR, xhr);\n    return xhr;\n  },\n\n  /**\n   * Set pagination data to get to the next page\n   * @param {Mixed} params\n   * @param {Object} [options]\n   * @param {Boolean} [options.fromFetch] should we include data from the previous fetch call in this object\n   * @example\n   * collection.setPagination({q: 'foo', page: '2'}); //=> {q: 'foo', page: '2'}\n   *\n   * collection.setPagination('/path/to/resource?q=baz&page=4'); //=> {q: 'baz', page: '4'}\n   *\n   * collection.setPagination('/path/to/resource'); //=> {}\n   *\n   * collection.fetch({data: {q: 'foo'}});\n   * collection.setPagination({page: 2}, {fromFetch: true}); //=> {q: 'foo', page: 2}\n   *\n   * any \"falsy\" value resets pagination\n   * collection.setPagination(); //=> {}\n   * collection.setPagination(null); //=> {}\n   * collection.setPagination(false); //=> {}\n   * collection.setPagination(''); //=> {}\n   * collection.setPagination(0); //=> {}\n   * @protected\n   */\n  setPagination: function (params, options) {\n    /* eslint complexity: [2, 8] */\n    if (oktaUnderscore.isString(params) && params) {\n      params = parseQuery(params);\n    }\n\n    if (!oktaUnderscore.isObject(params) || oktaUnderscore.isArray(params) || !oktaUnderscore.size(params)) {\n      params = null;\n    } else if (options && options.fromFetch) {\n      params = oktaUnderscore.extend({}, this.getFetchData(), params);\n    }\n\n    this[STATE].set(PAGINATION_DATA, params);\n  },\n\n  /**\n   * Returns the `data` parameters applied in th most recent `fetch` call\n   * It will include parameters set by {@link #params} and optios.params passed to the constructor\n   * @return {Object}\n   * @protected\n   */\n  getFetchData: function () {\n    return this[STATE].get(FETCH_DATA) || {};\n  },\n\n  /**\n   * Data object for constructing a request to fetch the next page\n   * @return {Object}\n   * @protected\n   */\n  getPaginationData: function () {\n    return this[STATE].get(PAGINATION_DATA) || {};\n  },\n\n  /**\n   * Does this collection have more data on the server (e.g is there a next \"page\")\n   * @return {Boolean}\n   */\n  hasMore: function () {\n    return oktaUnderscore.size(this.getPaginationData()) > 0;\n  },\n\n  /**\n   * Get the next page from the server\n   * @return {Object} xhr returned by {@link #fetch}\n   */\n  fetchMore: function () {\n    if (!this.hasMore()) {\n      throw new Error('Invalid Request');\n    }\n\n    return this.fetch({\n      data: this.getPaginationData(),\n      add: true,\n      remove: false,\n      update: true\n    });\n  },\n\n  /**\n   * See [Backbone Collection.reset](http://backbonejs.org/#Collection-reset).\n   */\n  reset: function (models, options) {\n    options || (options = {}); // only reset the pagination when reset is being called explicitly.\n    // this is to avoid link headers pagination being overriden and reset when\n    // fetching the collection using `collection.fetch({reset: true})`\n\n    if (!options.fromFetch) {\n      this.setPagination(null);\n    }\n\n    return Backbone.Collection.prototype.reset.apply(this, arguments);\n  },\n  // we want \"where\" to be able to search through derived properties as well\n  where: function (attrs, first) {\n    if (oktaUnderscore.isEmpty(attrs)) {\n      return first ? void 0 : [];\n    }\n\n    return this[first ? 'find' : 'filter'](function (model) {\n      for (var key in attrs) {\n        if (attrs[key] !== model.get(key)) {\n          return false;\n        }\n      }\n\n      return true;\n    });\n  },\n\n  /**\n   * See [Backbone Collection.create](http://backbonejs.org/#Collection-create).\n   */\n  create: function (model, options) {\n    options || (options = {});\n\n    if (!oktaUnderscore.result(model, 'urlRoot')) {\n      options.url = oktaUnderscore.result(this, 'url');\n    }\n\n    return Backbone.Collection.prototype.create.call(this, model, options);\n  },\n  // Use Object.create instead of {} on _byId to avoid __proto__ functions to return\n  // This can be removed once the issue has addressed in backbone framework\n  // https://github.com/jashkenas/backbone/pull/4225\n  _reset: function () {\n    Backbone.Collection.prototype['_reset'].call(this);\n    this._byId = Object.create(null);\n  }\n};\n/**\n *\n * Archer.Collection is a standard [Backbone.Collection](http://backbonejs.org/#Collection) with pre-set `data`\n * parameters and built in pagination - works with [http link headers](https://tools.ietf.org/html/rfc5988)\n * out of the box:\n *\n * @class src/framework/Collection\n * @extends external:Backbone.Collection\n * @example\n * var Users = Archer.Collection.extend({\n *   url: '/api/v1/users'\n *   params: {expand: true}\n * });\n * var users = new Users(null, {params: {type: 'new'}}),\n *     $button = this.$('a.fetch-more');\n *\n * $button.click(function () {\n *   users.fetchMore();\n * });\n *\n * this.listenTo(users, 'sync', function () {\n *   $button.toggle(users.hasMore());\n * });\n *\n * collection.fetch(); //=> '/api/v1/users?expand=true&type=new'\n */\n\nconst Collection = Backbone.Collection.extend(collectionProps);\n/**\n * It's used for distinguishing the ambiguity from _.isFunction()\n * which returns True for both a JavaScript Class constructor function\n * and normal function. With this flag, we can tell a function is actually\n * a Collection Class.\n * This flag is added in order to support the type of a parameter can be\n * either a Class or pure function that returns a Class.\n */\n\nCollection.isCourageCollection = true;\n\nexport { Collection as default };\n","import oktaUnderscore from '../util/underscore-wrapper.js';\nimport Collection from '../framework/Collection.js';\n\nconst baseCollectionProps =\n/** @lends module:Okta.Collection.prototype */\n{\n  /**\n   * Is the end point using the legacy \"secureJSON\" format\n   * @type {Function|Boolean}\n   */\n  secureJSON: false,\n  // TODO: may not be simplily moved to initialize as\n  // child class override initialize but didn't invoke parent.initialize.\n  // need to refactor child classes first.\n  constructor: function () {\n    Collection.apply(this, arguments);\n\n    if (oktaUnderscore.result(this, 'secureJSON')) {\n      this.sync = oktaUnderscore.wrap(this.sync, function (sync, method, collection, options) {\n        return sync.call(this, method, collection, oktaUnderscore.extend({\n          dataType: 'secureJSON'\n        }, options));\n      });\n    }\n  }\n};\n/**\n * Wrapper around the more generic {@link src/framework/Collection} that\n * contains Okta-specific logic.\n * @class module:Okta.Collection\n * @extends src/framework/Collection\n */\n\nvar BaseCollection = Collection.extend(baseCollectionProps);\n\nexport { BaseCollection as default };\n","import oktaUnderscore from '../util/underscore-wrapper.js';\nimport Backbone from '../vendor/lib/backbone.js';\nimport Logger from '../util/Logger.js';\n\nfunction isModelPropertySchema(obj) {\n  return obj && obj.type || obj.deps;\n}\n\n/**\n   * Archer.Model is a standard [Backbone.Model](http://backbonejs.org/#Model) with a few additions:\n   *\n   * - {@link src/framework/Model#derived Derived properties}\n   * - {@link src/framework/Model#props Built in schema validation}\n   * - {@link src/framework/Model#local Private properties (with schema validation)}\n   * - {@link src/framework/Model#flat Flattening of nested objects}\n   *\n   * Both derived and private properties are filtered out when sending the data to the server.\n   *\n   * See [Backbone.Model](http://backbonejs.org/#Model-constructor).\n   *\n   * @class src/framework/Model\n   * @extends external:Backbone.Model\n   * @param {Object} [attributes] - Initial model attributes (data)\n   * @param {Object} [options] - Options hash\n   * @example\n   * var Person = Archer.Model.extend({\n   *   props: {\n   *     'fname': 'string',\n   *     'lname': 'string'\n   *   },\n   *   local: {\n   *     isLoggedIn: 'boolean'\n   *   },\n   *   derived: {\n   *     name: {\n   *       deps: ['fname', 'lname'],\n   *       fn: function (fname, lname) {\n   *         return fname + ' ' + lname;\n   *       }\n   *     }\n   *   }\n   * });\n   * var model = new Person({fname: 'Joe', lname: 'Doe'});\n   * model.get('name'); //=> \"Joe Doe\"\n   * model.toJSON(); //=> {fname: 'Joe', lname: 'Doe'}\n   *\n   * model.set('isLoggedIn', true);\n   * model.get('isLoggedIn'); //=> true\n   * model.toJSON(); //=> {fname: 'Joe', lname: 'Doe'}\n   */\nlet Model;\nconst statics = {\n  ERROR_BLANK: 'model.validation.field.blank',\n  ERROR_WRONG_TYPE: 'model.validation.field.wrong.type',\n  ERROR_NOT_ALLOWED: 'model.validation.field.value.not.allowed',\n  ERROR_INVALID: 'model.validation.field.invalid',\n  ERROR_IARRAY_UNIQUE: 'model.validation.field.array.unique',\n  ERROR_INVALID_FORMAT_EMAIL: 'model.validation.field.invalid.format.email',\n  ERROR_INVALID_FORMAT_URI: 'model.validation.field.invalid.format.uri',\n  ERROR_INVALID_FORMAT_IPV4: 'model.validation.field.invalid.format.ipv4',\n  ERROR_INVALID_FORMAT_HOSTNAME: 'model.validation.field.invalid.format.hostname',\n  ERROR_STRING_STRING_MIN_LENGTH: 'model.validation.field.string.minLength',\n  ERROR_STRING_STRING_MAX_LENGTH: 'model.validation.field.string.maxLength'\n};\n\nfunction flatten(value, objectTypeFields, key, target) {\n  var filter = oktaUnderscore.contains(objectTypeFields, key);\n\n  target || (target = {});\n\n  if (!filter && oktaUnderscore.isObject(value) && !oktaUnderscore.isArray(value) && !oktaUnderscore.isFunction(value)) {\n    oktaUnderscore.each(value, function (val, i) {\n      flatten(val, objectTypeFields, key ? key + '.' + i : i, target);\n    });\n  } // Case where target is an empty object. Guard against returning {undefined: undefined}.\n  else if (key !== undefined) {\n    target[key] = value;\n  }\n\n  return target;\n}\n\nfunction unflatten(data) {\n  oktaUnderscore.each(data, function (value, key, data) {\n    if (key.indexOf('.') === -1) {\n      return;\n    }\n\n    var part;\n    var ref = data;\n    var parts = key.split('.');\n\n    while ((part = parts.shift()) !== undefined) {\n      if (!ref[part]) {\n        ref[part] = parts.length ? {} : value;\n      }\n\n      ref = ref[part];\n    }\n\n    delete data[key];\n  });\n\n  return data;\n}\n\nfunction createMessage(field, msg) {\n  var obj = {};\n  obj[field.name] = msg;\n  return obj;\n}\n\nfunction normalizeSchemaDef(field, name) {\n  var target;\n\n  if (oktaUnderscore.isString(field)) {\n    target = {\n      type: field\n    };\n  } else if (oktaUnderscore.isArray(field)) {\n    target = {\n      type: field[0],\n      required: field[1],\n      value: field[2]\n    };\n  } else {\n    target = oktaUnderscore.clone(field);\n  }\n\n  oktaUnderscore.defaults(target, {\n    required: false,\n    name: name\n  });\n\n  return target;\n}\n\nfunction capitalize(string) {\n  return string.toLowerCase().replace(/\\b[a-z]/g, function (letter) {\n    return letter.toUpperCase();\n  });\n}\n\nfunction _validateRegex(value, pattern, error) {\n  if (!pattern.test(value)) {\n    return error;\n  }\n}\n\nvar StringFormatValidators = {\n  /*eslint max-len: 0 */\n  email: function (value) {\n    // Taken from  http://emailregex.com/ on 2017-03-06.\n    var pattern = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n    return _validateRegex(value, pattern, Model.ERROR_INVALID_FORMAT_EMAIL);\n  },\n  uri: function (value) {\n    // source: https://mathiasbynens.be/demo/url-regex\n    var pattern = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\n    return _validateRegex(value, pattern, Model.ERROR_INVALID_FORMAT_URI);\n  },\n  ipv4: function (value) {\n    // source: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n    var pattern = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n    return _validateRegex(value, pattern, Model.ERROR_INVALID_FORMAT_IPV4);\n  },\n  hostname: function (value) {\n    // source: http://www.regextester.com/23\n    var pattern = /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/;\n    return _validateRegex(value, pattern, Model.ERROR_INVALID_FORMAT_HOSTNAME);\n  }\n};\n\nfunction validateStringFormat(field, value) {\n  var validator = StringFormatValidators[field.format];\n\n  if (field.format && !validator) {\n    throw new TypeError(field.format + ' is not a supported string format');\n  }\n\n  return validator && validator(value);\n}\n\nfunction validateString(field, value) {\n  var createMessageWith = oktaUnderscore.partial(createMessage, field);\n\n  var invalidFormat = validateStringFormat(field, value);\n\n  if (invalidFormat) {\n    return createMessageWith(invalidFormat);\n  }\n\n  if (value && field.minLength && value.length < field.minLength) {\n    return createMessageWith(Model.ERROR_STRING_STRING_MIN_LENGTH);\n  }\n\n  if (value && field.maxLength && value.length > field.maxLength) {\n    return createMessageWith(Model.ERROR_STRING_STRING_MAX_LENGTH);\n  }\n}\n\nfunction validateField(field, value) {\n  /* eslint complexity: [2, 25], max-statements: [2, 30] */\n  var createMessageWith = oktaUnderscore.partial(createMessage, field);\n\n  var isDefined = !oktaUnderscore.isUndefined(value) && !oktaUnderscore.isNull(value);\n  var checkType;\n  var errorMessage; // If using an array validator, perform the validation\n\n  if (Array.isArray(field.validate)) {\n    const output = [];\n    let foundError = false;\n    let result;\n    field.validate.forEach(item => {\n      if (!value) {\n        result = false;\n      } else {\n        switch (item.type.toLowerCase()) {\n          case 'regex':\n            result = new RegExp(item.value.pattern, item.value.flags || '').test(value);\n            break;\n\n          default:\n            result = false;\n        }\n      } // Append the result.\n\n\n      foundError = foundError || !result;\n      output.push({\n        // eslint-disable-next-line no-prototype-builtins\n        message: item.hasOwnProperty('message') ? item.message : '',\n        passed: result\n      });\n    });\n\n    if (foundError) {\n      return createMessageWith(output);\n    }\n\n    return;\n  } // check required fields\n\n\n  if (field.required && (!isDefined || oktaUnderscore.isNull(value) || value === '')) {\n    return createMessageWith(Model.ERROR_BLANK);\n  } // check type\n\n\n  checkType = oktaUnderscore['is' + capitalize(field.type)];\n\n  if (isDefined && field.type !== 'any' && (!oktaUnderscore.isFunction(checkType) || !checkType(value))) {\n    return createMessageWith(Model.ERROR_WRONG_TYPE);\n  } // validate string format\n\n\n  if (value && field.type === 'string') {\n    var error = validateString(field, value);\n\n    if (error) {\n      return error;\n    }\n  } // check pre set values (enum)\n\n\n  if (isDefined && field.values && !oktaUnderscore.contains(field.values, value)) {\n    return createMessageWith(Model.ERROR_NOT_ALLOWED);\n  } // check validate method\n\n\n  if (oktaUnderscore.isFunction(field.validate)) {\n    var result = field.validate(value);\n\n    if (oktaUnderscore.isString(result) && result) {\n      return createMessageWith(result);\n    } else if (result === false) {\n      return createMessageWith(Model.ERROR_INVALID);\n    }\n  } // check array items\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n\n\n  if (isDefined && field.type === 'array' && (errorMessage = validateArrayField(field, value))) {\n    return createMessageWith(errorMessage);\n  }\n}\n\nfunction validateArrayField(field, arr) {\n  if (field.minItems && arr.length < field.minItems) {\n    return 'model.validation.field.array.minItems';\n  } else if (field.maxItems && arr.length > field.maxItems) {\n    return 'model.validation.field.array.maxItems';\n  } else if (field.uniqueItems && arr.length > oktaUnderscore.uniq(arr).length) {\n    return Model.ERROR_IARRAY_UNIQUE;\n  } else if (field.items) {\n    /* eslint max-depth: [2, 3] */\n    var arrayField = normalizeSchemaDef(field.items, 'placeholder');\n\n    for (var i = 0; i < arr.length; i++) {\n      var value = arr[i];\n      var error = validateField(arrayField, value);\n\n      if (error) {\n        return error['placeholder'];\n      }\n    }\n  }\n}\n\nconst props =\n/** @lends src/framework/Model.prototype */\n{\n  /**\n     * Pass props as an object to extend, describing the observable properties of your model. The props\n     * properties should not be set on an instance, as this won't define new properties, they should only be passed to\n     * extend.\n     * Properties can be defined in three different ways:\n     *\n     * - As a string with the expected dataType. One of string, number, boolean, array, object, date, or any.\n     * Eg: `name: 'string'`.\n     * - An array of `[dataType, required, default]`\n     * - An object `{type: 'string', format: '', required: true, value: '', values: [], validate: function() {}`\n     *   - `value` will be the value that the property will be set to if it is undefined, either by not being set during\n     *   initialization, or by being explicitly set to undefined.\n     *   - `format` is a json-schame derived string format. Supported formats are: `email`, `uri`, `hostname` and `ipv4`.\n     *   - If `required` is true, one of two things will happen. If a default is set for the property, the property will\n     *   start with that value. If a default is not set for the property, validation will fail\n     *   - If `values` array is passed, then you'll be able to change a property to one of those values only.\n     *   - If `validate` is defined, it should return false or a custom message string when the validation fails.\n     *   - If the type is defined as `array`, the array elements could be defined by `minItems` (Number),\n     *   `uniqueItems` (Boolean) and `items` (a field definition such as this one that will validate each array member)\n     *   To the `validate` method\n     *   - Trying to set a property to an invalid type will raise an exception.\n     *\n     * @type {Mixed|Function}\n     * @example\n     * var Person = Model.extend({\n     *   props: {\n     *     name: 'string',\n     *     age: 'number',\n     *     paying: ['boolean', true, false], //required attribute, defaulted to false\n     *     type: {\n     *       type: 'string',\n     *       values: ['regular-hero', 'super-hero', 'mega-hero']\n     *     },\n     *     likes: {\n     *       type: 'string',\n     *       validate: function (value) {\n     *         return /^[\\w]+ing$/.test(value)\n     *       }\n     *     }\n     *   }\n     * });\n     */\n  props: {},\n\n  /**\n     * Derived properties (also known as computed properties) are properties of the model that depend on the\n     * other (props, local or even derived properties to determine their value. Best demonstrated with an example:\n     *\n     * Each derived property, is defined as an object with the current properties:\n     *\n     * - `deps` {Array} - An array of property names which the derived property depends on.\n     * - `fn` {Function} - A function which returns the value of the computed property. It is called in the context of\n     * the current object, so that this is set correctly.\n     * - `cache` {Boolean} -  - Whether to cache the property. Uncached properties are computed every time they are\n     * accessed. Useful if it depends on the current time for example. Defaults to `true`.\n     *\n     * Derived properties are retrieved and fire change events just like any other property. They cannot be set\n     * directly.\n     * @type {Object|Function}\n     * @example\n     * var Person = Model.extend({\n     *   props: {\n     *     firstName: 'string',\n     *     lastName: 'string'\n     *   },\n     *   derived: {\n     *     fullName: {\n     *       deps: ['firstName', 'lastName'],\n     *       fn: function (firstName, lastName) {\n     *         return firstName + ' ' + lastName;\n     *       }\n     *     }\n     *   }\n     * });\n     *\n     * var person = new Person({ firstName: 'Phil', lastName: 'Roberts' })\n     * console.log(person.get('fullName')) //=> \"Phil Roberts\"\n     *\n     * person.set('firstName', 'Bob');\n     * console.log(person.get('fullName')) //=> \"Bob Roberts\"\n     */\n  derived: {},\n\n  /**\n     * local properties are defined and work in exactly the same way as {@link src/framework/Model#props|props}, but generally only exist for\n     * the lifetime of the page.\n     * They would not typically be persisted to the server, and are not returned by calls to {@link src/framework/Model#toJSON|toJSON}.\n     *\n     * @type {Object|Function}\n     * @example\n     * var Person = Model.extend({\n     *   props: {\n     *     name: 'string',\n     *   },\n     *   local: {\n     *     isLoggedIn: 'boolean'\n     *   }\n     * );\n     */\n  local: {},\n\n  /**\n     * Flatten the payload into dot notation string keys:\n     *\n     * @type {Boolean|Function}\n     * @example\n     * var Person = Model.extend({\n     *   props: {\n     *     'profile.fname': 'string',\n     *     'profile.lname': 'string',\n     *     'profile.languages': 'object'\n     *   },\n     *   flat: true\n     * });\n     * var person = new Person({'profile': {\n     *                            'fname': 'John',\n     *                            'lname': 'Doe',\n     *                            'languages': {name: \"English\", value: \"EN\"}\n     *                         }}, {parse: true});\n     * person.get('profile'); //=> undefined\n     * person.get('profile.fname'); //=> 'John'\n     * person.get('profile.lname'); //=> 'Doe'\n     * person.get('profile.languages'); //=> {name: \"English\", value: \"EN\"}\n     * person.get('profile.languages.name'); //=> undefined\n     * person.toJSON(); //=> {'profile': {'fname': 'John'} }\n     */\n  flat: true,\n\n  /**\n     * @deprecated\n     * @alias Backbone.Model#defaults\n     */\n  defaults: {},\n  // FIXME: preinitialize takes parameter `attributes` and `options`, which inherit from constructor.\n  preinitialize: function (options, ...rest) {\n    this.options = options || {};\n    var schema = this['__schema__'] = {};\n    var objectTypeFields = [];\n    schema.computedProperties = {};\n    schema.props = oktaUnderscore.clone(oktaUnderscore.result(this, 'props') || {});\n    schema.derived = oktaUnderscore.clone(oktaUnderscore.result(this, 'derived') || {});\n    schema.local = oktaUnderscore.clone(oktaUnderscore.result(this, 'local') || {});\n    var defaults = {};\n\n    oktaUnderscore.each(oktaUnderscore.extend({}, schema.props, schema.local), function (options, name) {\n      var schemaDef = normalizeSchemaDef(options, name);\n\n      if (!oktaUnderscore.isUndefined(schemaDef.value)) {\n        defaults[name] = schemaDef.value;\n      }\n\n      if (schemaDef.type === 'object') {\n        objectTypeFields.push(name);\n      }\n    }, this);\n\n    if (oktaUnderscore.size(defaults)) {\n      var localDefaults = oktaUnderscore.result(this, 'defaults');\n\n      this.defaults = function () {\n        return oktaUnderscore.defaults({}, defaults, localDefaults);\n      };\n    } // override `validate`\n\n\n    this.validate = oktaUnderscore.wrap(this.validate, function (validate) {\n      var args = oktaUnderscore.rest(arguments);\n\n      var res = oktaUnderscore.extend(this._validateSchema.apply(this, args), validate.apply(this, args));\n\n      return oktaUnderscore.size(res) && res || undefined;\n    }); // override `parse`\n\n    this.parse = oktaUnderscore.wrap(this.parse, function (parse) {\n      var target = parse.apply(this, oktaUnderscore.rest(arguments));\n\n      if (oktaUnderscore.result(this, 'flat')) {\n        target = flatten(target, objectTypeFields);\n      }\n\n      return target;\n    });\n    Backbone.Model.prototype.preinitialize.call(this, options, ...rest);\n  },\n  // FIXME:\n  // constructor takes parameter `attributes` and `options`.\n  constructor: function () {\n    Backbone.Model.apply(this, arguments);\n    var schema = this['__schema__'];\n\n    oktaUnderscore.each(schema.derived, function (options, name) {\n      schema.computedProperties[name] = this.__getDerivedValue(name); // set initial value;\n\n      var deps = isModelPropertySchema(options) ? options.deps || [] : [];\n\n      if (deps.length) {\n        this.on('cache:clear change:' + deps.join(' change:'), function () {\n          var value = this.__getDerivedValue(name);\n\n          if (value !== schema.computedProperties[name]) {\n            schema.computedProperties[name] = value;\n            this.trigger('change:' + name, this, value);\n          }\n        }, this);\n      }\n    }, this);\n\n    this.on('sync', function () {\n      this.__syncedData = this.toJSON();\n    }, this);\n  },\n  validate: function () {},\n\n  /**\n     * Check if the schema settings allow this field to exist in the model\n     * @param  {String} key\n     * @return {Boolean}\n     */\n  allows: function (key) {\n    var schema = this['__schema__'];\n\n    var all = oktaUnderscore.extend({}, schema.props, schema.local);\n\n    if (!oktaUnderscore.has(all, key)) {\n      Logger.warn('Field not defined in schema', key);\n    }\n\n    return true;\n  },\n\n  /**\n     * Returns the schema for the specific property\n     *\n     * @param propName - The name of the property\n     * @returns {*} | null\n     */\n  getPropertySchema: function (propName) {\n    var schema = this['__schema__'];\n    return oktaUnderscore.reduce([schema.props, schema.local], function (result, options) {\n      return result || normalizeSchemaDef(options[propName], propName);\n    }, null);\n  },\n  set: function (key, val) {\n    var attrs;\n\n    if (typeof key === 'object') {\n      attrs = key;\n    } else {\n      (attrs = {})[key] = val;\n    } // Don't override a computed properties\n\n\n    oktaUnderscore.each(attrs, function (value, key) {\n      if (oktaUnderscore.has(this['__schema__'].derived, key)) {\n        throw new Error(`overriding derived properties is not supported: ${key}`);\n      }\n    }, this); // Schema validation\n\n\n    var errorFields = [];\n\n    oktaUnderscore.each(attrs, function (value, key) {\n      this.allows(key) || errorFields.push(key);\n    }, this);\n\n    if (errorFields.length) {\n      throw new Error(`field not allowed: ${errorFields.join(', ')}`);\n    }\n\n    return Backbone.Model.prototype.set.apply(this, arguments);\n  },\n  get: function (attr) {\n    var schema = this['__schema__'];\n\n    if (oktaUnderscore.has(schema.derived, attr)) {\n      if (schema.derived[attr].cache !== false) {\n        return schema.computedProperties[attr];\n      } else {\n        return this.__getDerivedValue(attr);\n      }\n    }\n\n    return Backbone.Model.prototype.get.apply(this, arguments);\n  },\n\n  /**\n     * Return a shallow copy of the model's attributes for JSON stringification.\n     * This can be used for persistence, serialization, or for augmentation before being sent to the server.\n     * The name of this method is a bit confusing, as it doesn't actually return a JSON string —\n     * but I'm afraid that it's the way that the JavaScript API for JSON.stringify works.\n     *\n     * See [Backbone.Model.toJSON](http://backbonejs.org/#Model-toJSON)\n     *\n     * @param  {Object} options\n     * @return {Object}\n     * @example\n     * var artist = new Model({\n     *   firstName: 'Wassily',\n     *   lastName: 'Kandinsky'\n     * });\n     *\n     * artist.set({birthday: 'December 16, 1866'});\n     * JSON.stringify(artist); //=> {'firstName':'Wassily','lastName':'Kandinsky','birthday':'December 16, 1866'}\n     */\n  toJSON: function (options) {\n    options || (options = {});\n\n    var res = oktaUnderscore.clone(Backbone.Model.prototype.toJSON.apply(this, arguments));\n\n    var schema = this['__schema__']; // cleanup local properties\n\n    if (!options.verbose) {\n      res = oktaUnderscore.omit(res, oktaUnderscore.keys(schema.local));\n    } else {\n      // add derived properties\n      oktaUnderscore.each(schema.derived, function (options, name) {\n        res[name] = this.get(name);\n      }, this);\n    }\n\n    if (this.flat) {\n      res = unflatten(res);\n    }\n\n    return res;\n  },\n\n  /**\n     * Removes all attributes from the model, including the id attribute.\n     * Fires a `\"change\"` event unless `silent` is passed as an option.\n     * Sets the default values to the model\n     * @param {Object} [options]\n     */\n  reset: function (options) {\n    this.clear(options);\n    this.set(oktaUnderscore.result(this, 'defaults'), options);\n  },\n\n  /**\n     * Is the data on the model has local modifications since the last sync event?\n     * @return {Boolean} is the model in sync with the server\n     */\n  isSynced: function () {\n    return oktaUnderscore.isEqual(this.__syncedData, this.toJSON());\n  },\n\n  /**\n     * validate a specific field in the model.\n     * @param  {String} key\n     * @return {Object} returns `{fieldName: errorMessage}` if invalid, otherwise undefined.\n     * @readonly\n     */\n  validateField: function (key) {\n    var schema = key && this.getPropertySchema(key);\n    return schema && validateField(schema, this.get(key));\n  },\n\n  /**\n     * Runs local schema validation. Invoked internally by {@link src/framework/Model#validate|validate}.\n     * @return {Object}\n     * @protected\n     */\n  _validateSchema: function () {\n    var schema = this['__schema__'];\n    return oktaUnderscore.reduce(oktaUnderscore.extend({}, schema.props, schema.local), function (memo, options, name) {\n      return oktaUnderscore.extend(memo, this.validateField(name) || {});\n    }, {}, this);\n  },\n  __getDerivedValue: function (name) {\n    var options = this['__schema__'].derived[name];\n\n    if (oktaUnderscore.isString(options)) {\n      var key = options;\n      options = {\n        deps: [key],\n        fn: function () {\n          return this.get(key);\n        }\n      };\n    }\n\n    var deps = options.deps || [];\n    return options.fn.apply(this, oktaUnderscore.map(deps, this.get, this));\n  }\n};\nModel = Backbone.Model.extend(props, statics);\n/**\n * It's used for distinguishing the ambiguity from _.isFunction()\n * which returns True for both a JavaScript Class constructor function\n * and normal function. With this flag, we can tell a function is actually\n * a Model Class.\n * This flag is added in order to support the type of a parameter can be\n * either a Class or pure function that returns a Class.\n */\n\nModel.isCourageModel = true;\nvar FrameworkModel = Model;\n\nexport { FrameworkModel as default, isModelPropertySchema };\n","import oktaUnderscore from '../util/underscore-wrapper.js';\nimport FrameworkModel from '../framework/Model.js';\n\n/**\n * Wrapper around the more generic {@link src/framework/Model} that\n * contains Okta-specific logic.\n * @class module:Okta.Model\n * @extends src/framework/Model\n */\nvar Model = FrameworkModel.extend(\n/** @lends module:Okta.Model.prototype */\n{\n  /**\n   * Is the end point using the legacy \"secureJSON\" format\n   * @type {Function|Boolean}\n   */\n  secureJSON: false,\n  _builtInLocalProps: {\n    __edit__: 'boolean',\n    __pending__: 'boolean'\n  },\n  preinitialize: function () {\n    this.local = oktaUnderscore.defaults({}, oktaUnderscore.result(this, 'local'), this._builtInLocalProps);\n    FrameworkModel.prototype.preinitialize.apply(this, arguments);\n  },\n  constructor: function () {\n    FrameworkModel.apply(this, arguments);\n\n    if (oktaUnderscore.result(this, 'secureJSON')) {\n      this.sync = oktaUnderscore.wrap(this.sync, function (sync, method, model, options) {\n        return sync.call(this, method, model, oktaUnderscore.extend({\n          dataType: 'secureJSON'\n        }, options));\n      });\n    }\n  }\n});\n\nexport { Model as default };\n","import oktaUnderscore from '../util/underscore-wrapper.js';\nimport Model from './Model.js';\n\nconst hasProps = function (model) {\n  const local = oktaUnderscore.omit(model.local, oktaUnderscore.keys(model._builtInLocalProps));\n\n  return oktaUnderscore.size(model.props) + oktaUnderscore.size(local) > 0;\n};\n\nconst props =\n/** @lends module:Okta.BaseModel.prototype */\n{\n  /**\n   * @type {Boolean}\n   */\n  flat: false,\n  constructor: function () {\n    Model.apply(this, arguments);\n    this.on('sync', this._setSynced);\n  },\n  allows: function () {\n    if (hasProps(this)) {\n      return Model.prototype.allows.apply(this, arguments);\n    } else {\n      return true;\n    }\n  },\n  // bw compatibility support for old computed properties\n  set: function (key, val) {\n    let attrs;\n\n    if (typeof key === 'object') {\n      attrs = key;\n    } else {\n      (attrs = {})[key] = val;\n    } // computed properties\n\n\n    oktaUnderscore(attrs).each(function (fn, attr) {\n      if (!fn || !oktaUnderscore.isArray(fn.__attributes)) {\n        return;\n      }\n\n      this.on('change:' + fn.__attributes.join(' change:'), function () {\n        const val = this.get(attr);\n\n        if (val !== this['__schema__'].computedProperties[attr]) {\n          this['__schema__'].computedProperties[attr] = val;\n          this.trigger('change:' + attr, val);\n        }\n      }, this);\n    }, this);\n\n    return Model.prototype.set.apply(this, arguments);\n  },\n\n  /**\n   * Get the current value of an attribute from the model. For example: `note.get(\"title\")`\n   *\n   * See [Model.get](http://backbonejs.org/#Model-get)\n   * @param {String} attribute\n   * @return {Mixed} The value of the model attribute\n   */\n  get: function () {\n    const value = Model.prototype.get.apply(this, arguments);\n\n    if (oktaUnderscore.isFunction(value)) {\n      return value.apply(this, oktaUnderscore.map(value.__attributes || [], this.get, this));\n    }\n\n    return value;\n  },\n\n  /**\n   * Return a shallow copy of the model's attributes for JSON stringification.\n   * This can be used for persistence, serialization, or for augmentation before being sent to the server.\n   * The name of this method is a bit confusing, as it doesn't actually return a JSON string —\n   *  but I'm afraid that it's the way that the JavaScript API for JSON.stringify works.\n   *\n   * ```javascript\n   * var artist = new Model({\n   *   firstName: \"Wassily\",\n   *   lastName: \"Kandinsky\"\n   * });\n   *\n   * artist.set({birthday: \"December 16, 1866\"});\n   * alert(JSON.stringify(artist)); // {\"firstName\":\"Wassily\",\"lastName\":\"Kandinsky\",\"birthday\":\"December 16, 1866\"}\n   * ```\n   * See [Model.toJSON](http://backbonejs.org/#Model-toJSON)\n   * @param  {Object} options\n   * @return {Object}\n   */\n  toJSON: function (options) {\n    options || (options = {});\n    const res = Model.prototype.toJSON.apply(this, arguments); // cleanup computed properties\n\n    oktaUnderscore(res).each(function (value, key) {\n      if (typeof value === 'function') {\n        if (options.verbose) {\n          res[key] = this.get(key);\n        } else {\n          delete res[key];\n        }\n      }\n    }, this); // cleanup private properties\n\n\n    if (!options.verbose) {\n      oktaUnderscore(res).each(function (value, key) {\n        if (/^__\\w+__$/.test(key)) {\n          delete res[key];\n        }\n      });\n    }\n\n    return res;\n  },\n  sanitizeAttributes: function (attributes) {\n    const attrs = {};\n\n    oktaUnderscore.each(attributes, function (value, key) {\n      if (!oktaUnderscore.isFunction(value)) {\n        attrs[key] = value;\n      }\n    });\n\n    return attrs;\n  },\n  reset: function (options) {\n    this.clear(options);\n    this.set(this.sanitizeAttributes(this.defaults), options);\n  },\n  clear: function (options) {\n    const attrs = {};\n\n    oktaUnderscore.each(this.sanitizeAttributes(this.attributes), function (value, key) {\n      attrs[key] = void 0;\n    });\n\n    return this.set(attrs, oktaUnderscore.extend({}, options, {\n      unset: true\n    }));\n  },\n\n  /**\n   * @private\n   */\n  _setSynced: function (newModel) {\n    this._syncedData = newModel && oktaUnderscore.isFunction(newModel.toJSON) ? newModel.toJSON() : {};\n  },\n\n  /**\n   * @private\n   */\n  _getSynced: function () {\n    return this._syncedData;\n  },\n  isSynced: function () {\n    return oktaUnderscore.isEqual(this._getSynced(), this.toJSON());\n  }\n};\nconst statics =\n/** @lends module:Okta.BaseModel.prototype */\n{\n  /**\n   * @static\n   *\n   * Example:\n   *\n   * ```javascript\n   * var Model = BaseModel.extend({\n   *   defaults: {\n   *     name: BaseModel.ComputedProperty(['fname', 'lname'], function (fname, lname) {\n   *       return fname + ' ' + lname;\n   *     })\n   *   }\n   * });\n   * var model = new Model({fname: 'Joe', lname: 'Doe'});\n   * model.get('name'); // Joe Doe\n   * model.toJSON(); // {fname: 'Joe', lname: 'Doe'}\n   * ```\n   *\n   * @param {Array} attributes (optional) - an array of the attribute names this method depends on\n   * @param {Function} callback the function that computes the value of the property\n   *\n   * @deprecated Use {@link #derived} instead\n   */\n  ComputedProperty: function (attributes, fn) {\n    // First parameter is optional\n    if (!fn && typeof attributes === 'function') {\n      fn = attributes;\n    } else {\n      fn.__attributes = attributes;\n    }\n\n    return fn;\n  }\n};\n/**\n * @class module:Okta.BaseModel\n * @extends module:Okta.Model\n * @deprecated Use {@link module:Okta.Model|Okta.Model} instead\n * @example\n * var Model = BaseModel.extend({\n *   defaults: {\n *     name: BaseModel.ComputedProperty(['fname', 'lname'], function (fname, lname) {\n *       return fname + ' ' + lname;\n *     })\n *   }\n * });\n * var model = new Model({fname: 'Joe', lname: 'Doe'});\n * model.get('name'); //=> \"Joe Doe\"\n * model.toJSON(); //=> {fname: 'Joe', lname: 'Doe'}\n *\n * model.set('__private__', 'private property');\n * model.get('__private__'); //=> \"private property\"\n * model.toJSON(); //=> {fname: 'Joe', lname: 'Doe'}\n */\n\nvar BaseModel = Model.extend(props, statics);\n\nexport { BaseModel as default };\n","import $ from 'jquery';\n\n/* eslint-disable @okta/okta-ui/enforce-requirejs-names, @okta/okta-ui/no-specific-modules */\n$.ajaxSetup({\n  beforeSend: function (xhr) {\n    xhr.setRequestHeader('X-Okta-XsrfToken', $('#_xsrfToken').text());\n  },\n  converters: {\n    'text secureJSON': function (str) {\n      if (str.substring(0, 11) === 'while(1){};') {\n        str = str.substring(11);\n      }\n\n      return JSON.parse(str);\n    }\n  }\n}); // Selenium Hook\n// Widget such as autocomplete and autosuggest needs to be triggered from the running version of jQuery.\n// We have 2 versions of jQuery running in parallel and they don't share the same events bus\n\nconst oktaJQueryStatic = $;\nwindow.jQueryCourage = oktaJQueryStatic;\n\nexport { oktaJQueryStatic as default };\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nconst fn: Record<string, (...any: any[]) => any> = {};\nconst hasFullCorsSupport = 'withCredentials' in new window.XMLHttpRequest();\nconst hasXDomainRequest = typeof window.XDomainRequest !== 'undefined';\n\nfn.corsIsNotSupported = function() {\n  return !(hasFullCorsSupport || hasXDomainRequest);\n};\n\nfn.corsIsNotEnabled = function(jqXhr) {\n  // Not a definitive check, but it's the best we've got.\n  // Note: This will change when OktaAuth is updated\n  return jqXhr.status === 0;\n};\n\n// This is currently not being used, but we'll keep it around for when we\n// want a fallback mechanism - i.e. use localStorage if it exists, else fall\n// back to cookies.\nfn.localStorageIsNotSupported = function() {\n  const test = 'test';\n\n  try {\n    localStorage.setItem(test, test);\n    localStorage.removeItem(test);\n    return false;\n  } catch (e) {\n    return true;\n  }\n};\n\nfn.supportsPushState = function(win) {\n  win = win || window;\n  return !!(win.history && win.history.pushState);\n};\n\nfn.isIE = function() {\n  return /(msie|trident)/i.test(navigator.userAgent);\n};\n\nfn.isFirefox = function() {\n  return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n};\n\nfn.isEdge = function() {\n  // This is to just check for windows edge. Mac edge - chromium based's UA is 'edg'.\n  return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\n};\n\nfn.isSafari = function() {\n  // Chrome has safari in its useragent string so adding this extra check.\n  return (\n    navigator.userAgent.toLowerCase().indexOf('safari') > -1 &&\n    navigator.userAgent.toLowerCase().indexOf('chrome') === -1\n  );\n};\n\nfn.isMac = function() {\n  return navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n};\n\n\nfn.isAndroid = function() {\n  // Windows Phone also contains \"Android\"\n  return /android/i.test(navigator.userAgent) &&\n    !/windows phone/i.test(navigator.userAgent);\n};\n\nfn.isIOS = function() {\n  // iOS detection from: http://stackoverflow.com/a/9039885/177710\n  return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n};\n\n// Returns a list of languages the user has configured for their browser, in\n// order of preference.\nfn.getUserLanguages = function() {\n  // Chrome, Firefox\n  if (navigator.languages) {\n    return [...navigator.languages];\n  }\n\n  const languages = [];\n  const properties = [\n    'language',         // Safari, IE11\n    'userLanguage',     // IE\n    'browserLanguage',  // IE\n    'systemLanguage'    // IE\n  ];\n\n  properties.forEach(function(property) {\n    if (navigator[property]) {\n      languages.push(navigator[property]);\n    }\n  });\n\n  return languages;\n};\n\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nfunction log(level, args) {\n  // Only log statements in development mode or if\n  // throwing an error through console.error\n  if (DEBUG || level === 'error') {\n    window.console[level].apply(window.console, args);\n  }\n}\n\n/**\n * Utility library of logging functions.\n */\nexport default {\n  trace: function() {\n    return log('trace', arguments);\n  },\n\n  dir: function() {\n    return log('dir', arguments);\n  },\n\n  time: function() {\n    return log('time', arguments);\n  },\n\n  timeEnd: function() {\n    return log('timeEnd', arguments);\n  },\n\n  group: function() {\n    return log('group', arguments);\n  },\n\n  groupEnd: function() {\n    return log('groupEnd', arguments);\n  },\n\n  assert: function() {\n    return log('assert', arguments);\n  },\n\n  log: function() {\n    return log('log', arguments);\n  },\n\n  info: function() {\n    return log('info', arguments);\n  },\n\n  warn: function() {\n    return log('warn', arguments);\n  },\n\n  error: function() {\n    return log('error', arguments);\n  },\n\n  deprecate: function(msg) {\n    return log('warn', ['[okta-signin-widget] DEPRECATED:', msg]);\n  },\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport config from 'config/config.json';\nimport fetch from 'cross-fetch';\nimport country from 'nls/country.json';\nimport login from 'nls/login.json';\nimport Q from 'q';\nimport _ from 'underscore';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport Logger from 'util/Logger';\nconst STORAGE_KEY = 'osw.languages';\n\ndeclare type i18nOptions = {\n  [localeOrCountry: string]: {\n    [i18nKey: string]: string;\n  }\n}\n\ndeclare type Assets = {\n  baseUrl: string;\n  rewrite(origPath: string): string;\n}\n\n/**\n * Converts options to our internal format, which distinguishes between\n * login and country bundles.\n *\n * Example options.i18n passed in by the developer:\n * {\n *   'en': {\n *     'needhelp': 'need help override',\n *     'primaryauth.title': 'new sign in text',\n *     'country.JP' = 'Japan, Japan'\n *   }\n * }\n *\n * Parsed:\n * {\n *  'en': {\n *    'login': {\n *      'needhelp': 'need help override',\n *      'primaryauth.title': 'new sign in text',\n *    },\n *    'country': {\n *      'JP': 'Japan, Japan'\n *    }\n *  }\n * }\n */\nfunction parseOverrides(i18n) {\n  if (!i18n) {\n    return {};\n  }\n\n  const i18nWithLowerCaseKeys = {};\n\n  _.each(_.keys(i18n), function(key) {\n    i18nWithLowerCaseKeys[key.toLowerCase()] = i18n[key];\n  });\n\n  return _.mapObject(i18nWithLowerCaseKeys, function(props) {\n    const mapped = { login: {}, country: {} };\n\n    if (!_.isObject(props)) {\n      throw new Error('Invalid format for \"i18n\"');\n    }\n    _.each(props, function(val, key) {\n      const split = key.split(/^country\\./);\n\n      if (split.length > 1) {\n        mapped.country[split[1]] = val;\n      } else {\n        mapped.login[split[0]] = val;\n      }\n    });\n    return mapped;\n  });\n}\n\n// Caching: We only bundle English by default in the Sign-In Widget. Other\n// languages are loaded on demand and cached in localStorage. These languages\n// are tied to the version of the widget - when it bumps, we reset the cache.\n\nfunction getCachedLanguages() {\n  let storage = JSON.parse(localStorage.getItem(STORAGE_KEY));\n\n  if (!storage || storage.version !== config.version) {\n    storage = {\n      version: config.version,\n    };\n  }\n  return storage;\n}\n\nfunction addLanguageToCache(language, loginJson, countryJson) {\n  const current = getCachedLanguages();\n\n  current[language] = {\n    login: loginJson,\n    country: countryJson,\n  };\n  localStorage.setItem(STORAGE_KEY, JSON.stringify(current));\n}\n\n// By default, the assets.bundleUrl is tied to the Okta CDN.\n//\n// There are two overrides available for modifying where we load the asset\n// bundles from:\n//\n// 1. assets.baseUrl\n//\n//    This is the base path the OSW pulls assets from, which in this case is\n//    the Okta CDN. Override this config option if you want to host the\n//    files on your own domain, or if you're using a new version of the\n//    widget whose language files haven't been published to the CDN yet.\n//\n// 2. assets.rewrite\n//\n//    This is a function that can be used to modify the path + fileName of\n//    the bundle we're loading, relative to the baseUrl. When called, it\n//    will pass the current path, and expect the new path to be returned.\n//    This is useful, for example, if your build process has an extra\n//    cachebusting step, i.e:\n//\n//    function rewrite(file) {\n//      // file: /labels/json/login_ja.json\n//      return file.replace('.json', '.' + md5file(file) + '.json');\n//    }\n//\n// Note: Most developers will not need to use these overrides - the default\n// is to use the Okta CDN and to use the same path + file structure the\n// widget module publishes by default.\nfunction fetchJson(bundle, language, assets) {\n  // Our bundles use _ to separate country and region, i.e:\n  // zh-CN -> zh_CN\n  const languageCode = language.replace('-', '_');\n\n  const path = assets.rewrite(encodeURI(`/labels/json/${bundle}_${languageCode}.json`));\n\n  const headers = {\n    Accept: 'application/json',\n    'Content-Type': 'text/plain',\n  };\n\n  const mode = 'no-cors';\n\n  return fetch(assets.baseUrl + path, {\n    method: 'GET',\n    headers,\n    mode,\n  })\n    .then(res => res.text())\n    .then(txt => JSON.parse(txt));\n}\n\nfunction getBundles(language, assets, supportedLanguages) {\n  // Two special cases:\n  // 1. Default language is already bundled with the widget\n  // 2. If the language is not in our config file, it means that they've\n  //    probably defined it on their own.\n  if (language === config.defaultLanguage || !_.contains(supportedLanguages, language)) {\n    return Q({});\n  }\n\n  //local storage does not work correctly with android web views (embeded browers)\n  //so skip the caching and just make the request to get the local info\n  const localStorageIsSupported = !BrowserFeatures.localStorageIsNotSupported();\n\n  if (localStorageIsSupported) {\n    const cached = getCachedLanguages();\n\n    if (cached[language]) {\n      return Q(cached[language]);\n    }\n  }\n\n  return Q.all([fetchJson('login', language, assets), fetchJson('country', language, assets)])\n    .spread(function(loginJson, countryJson) {\n      if (localStorageIsSupported) {\n        addLanguageToCache(language, loginJson, countryJson);\n      }\n      return { login: loginJson, country: countryJson };\n    })\n    .catch(function() {\n      // If there is an error, this will default to the bundled language and\n      // we will no longer try to load the language this session.\n      Logger.warn('Unable to load language: ' + language);\n      return {};\n    });\n}\n\nexport default {\n  login: login,\n  country: country,\n  // Courage components within the sign in widget point to courage bundle to look\n  // up i18nkeys. Since we dont have courage.properties inside the sign in widget\n  // we are pointing courage bundle to login.\n  courage: login,\n\n  currentLanguage: null,\n\n  isLoaded: function(language: string): boolean {\n    return this.currentLanguage === language;\n  },\n\n  remove: function(): void {\n    this.currentLanguage = null;\n  },\n\n  loadLanguage: function(language: string, overrides: i18nOptions, assets: Assets, supportedLanguages: string[]): Q.Promise<void> {\n    const parsedOverrides = parseOverrides(overrides);\n    const lowerCaseLanguage = language.toLowerCase();\n    return getBundles(language, assets, supportedLanguages).then(bundles => {\n      // Always extend from the built in defaults in the event that some\n      // properties are not translated\n      this.login = _.extend({}, login, bundles.login);\n      this.country = _.extend({}, country, bundles.country);\n      this.courage = _.extend({}, login, bundles.login);\n      if (parsedOverrides[lowerCaseLanguage]) {\n        _.extend(this.login, parsedOverrides[lowerCaseLanguage]['login']);\n        _.extend(this.country, parsedOverrides[lowerCaseLanguage]['country']);\n        _.extend(this.courage, parsedOverrides[lowerCaseLanguage]['login']);\n      }\n      this.currentLanguage = language;\n    });\n  },\n};\n","import oktaJQueryStatic from './jquery-wrapper.js';\nimport oktaUnderscore from './underscore-wrapper.js';\nimport Bundles from '@okta/okta-i18n-bundles';\n\nconst entityMap = {\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&#39;': '\\'',\n  '&#039;': '\\'',\n  '&#x2F;': '/'\n};\nconst emailValidator = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@(?!-)((\\[?[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\]?)|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/**\n* Converts the locale code identifier from \"${languageCode}-${countryCode}\" to \"${languageCode}_${countryCode}\"\n* Follows the ISO-639-1 language code and 2-letter ISO-3166-1-alpha-2 country code structure.\n* @param {String} locale code identifier\n* @return {String} converted locale code identifier\n*/\n\nconst parseLocale = locale => {\n  if (/-/.test(locale)) {\n    const parts = locale.split('-');\n    parts[1] = parts[1].toUpperCase();\n    return parts.join('_');\n  }\n\n  return locale;\n};\n/* eslint max-len: 0*/\n\n/**\n * Returns the user's locale as defined by window.okta.locale\n */\n\n\nfunction getRawLocale() {\n  return window && window.okta && window.okta.locale || 'en';\n}\n/**\n * Returns the language bundle based on the current locale.\n * - If a locale is not provided, default to English ('en')\n * - Legacy Support: If the named language bundle does not exist, fall back to the default named bundle.\n *\n * @param {*} bundleName\n */\n\n\nfunction getBundle(bundleName) {\n  if (!bundleName) {\n    return Bundles[oktaUnderscore.keys(Bundles)[0]];\n  }\n\n  const locale = parseLocale(getRawLocale());\n  return Bundles[`${bundleName}_${locale}`] || Bundles[bundleName];\n}\n/**\n *\n * CustomEvent polyfill for IE\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#polyfill\n */\n\n\nfunction IECustomEvent(event, params) {\n  params = params || {\n    bubbles: false,\n    cancelable: false,\n    detail: null\n  };\n  var evt = document.createEvent('CustomEvent');\n  evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n  return evt;\n}\n/**\n * Call the window.okta.emitL10nError function if it is defined\n * @param {String} key The i18n key\n * @param {String} bundleName The i18n bundle name\n * @param {String} reason Could be 'bundle' (Bundle not found), 'key' (Key not found) or 'parameters' (Parameters mismatch).\n */\n\n\nfunction emitL10nError(key, bundleName, reason) {\n  // CustomEvent polyfill for IE\n  if (!window.CustomEvent) {\n    window.CustomEvent = IECustomEvent;\n  } // dispatchEvent for sentry\n\n\n  if (typeof window.CustomEvent === 'function') {\n    const event = new CustomEvent('okta-i18n-error', {\n      detail: {\n        type: 'l10n-error',\n        key: key,\n        bundleName: bundleName,\n        reason: reason\n      }\n    });\n    document.dispatchEvent(event);\n  }\n}\n\nconst StringUtil =\n/** @lends module:Okta.internal.util.StringUtil */\n{\n  /** @static */\n  getRawLocale: function () {\n    return getRawLocale();\n  },\n\n  /** @static */\n  getParsedLocale: function () {\n    return parseLocale(getRawLocale());\n  },\n\n  /** @static */\n  isLocaleBundleExist: function (bundleName, locale) {\n    const parsedLocale = parseLocale(locale);\n    return !!Bundles[`${bundleName}_${parsedLocale}`];\n  },\n\n  /** @static */\n  sprintf: function () {\n    const args = Array.prototype.slice.apply(arguments);\n    let value = args.shift();\n    let oldValue = value;\n    /* eslint max-statements: [2, 15] */\n\n    function triggerError() {\n      throw new Error('Mismatch number of variables: ' + arguments[0] + ', ' + JSON.stringify(args));\n    }\n\n    for (var i = 0, l = args.length; i < l; i++) {\n      const entity = args[i];\n      const regex = new RegExp('\\\\{' + i + '\\\\}', 'g');\n      value = value.replace(regex, entity);\n\n      if (entity === undefined || entity === null || value === oldValue) {\n        triggerError();\n      }\n\n      oldValue = value;\n    }\n\n    if (/\\{[\\d+]\\}/.test(value)) {\n      triggerError();\n    }\n\n    return value;\n  },\n\n  /**\n   * Converts a URI encoded query string into a hash map\n   * @param  {String} query The query string\n   * @return {Object} The map\n   * @static\n   * @example\n   * StringUtil.parseQuery('foo=bar&baz=qux') // {foo: 'bar', baz: 'qux'}\n   */\n  parseQuery: function (query) {\n    const params = {};\n    const pairs = decodeURIComponent(query.replace(/\\+/g, ' ')).split('&');\n\n    for (var i = 0; i < pairs.length; i++) {\n      const pair = pairs[i];\n      const data = pair.split('=');\n      params[data.shift()] = data.join('=');\n    }\n\n    return params;\n  },\n\n  /** @static */\n  encodeJSObject: function (jsObj) {\n    return encodeURIComponent(JSON.stringify(jsObj));\n  },\n\n  /** @static */\n  decodeJSObject: function (jsObj) {\n    try {\n      return JSON.parse(decodeURIComponent(jsObj));\n    } catch (e) {\n      return null;\n    }\n  },\n\n  /** @static */\n  unescapeHtml: function (string) {\n    return String(string).replace(/&[\\w#\\d]{2,};/g, function (s) {\n      return entityMap[s] || s;\n    });\n  },\n\n  /**\n   * Get the original i18n template directly without string format with parameters\n   * @param {String} key The key\n   * @param {String} bundle=\"messages\"] The name of the i18n bundle. Defaults to the first bundle in the list.\n   */\n  getTemplate: function (key, bundleName) {\n    const bundle = getBundle(bundleName);\n\n    if (!bundle) {\n      emitL10nError(key, bundleName, 'bundle');\n      return 'L10N_ERROR[' + bundleName + ']';\n    }\n\n    if (bundle[key]) {\n      return bundle[key];\n    } else {\n      emitL10nError(key, bundleName, 'key');\n      return 'L10N_ERROR[' + key + ']';\n    }\n  },\n\n  /**\n   * Translate a key to the localized value\n   * @static\n   * @param  {String} key The key\n   * @param  {String} [bundle=\"messages\"] The name of the i18n bundle. Defaults to the first bundle in the list.\n   * @param  {Array} [params] A list of parameters to apply as tokens to the i18n value\n   * @return {String} The localized value\n   */\n  localize: function (key, bundleName, params) {\n    const bundle = getBundle(bundleName);\n    /* eslint complexity: [2, 6] */\n\n    if (!bundle) {\n      emitL10nError(key, bundleName, 'bundle');\n      return 'L10N_ERROR[' + bundleName + ']';\n    }\n\n    let value = bundle[key];\n\n    try {\n      params = params && params.slice ? params.slice(0) : [];\n      params.unshift(value);\n      value = StringUtil.sprintf.apply(null, params);\n\n      if (value) {\n        return value;\n      } else {\n        emitL10nError(key, bundleName, 'key');\n        return 'L10N_ERROR[' + key + ']';\n      }\n    } catch (e) {\n      emitL10nError(key, bundleName, 'parameters');\n      return 'L10N_ERROR[' + key + ']';\n    }\n  },\n\n  /**\n   * Convert a string to a float if valid, otherwise return the string.\n   * Valid numbers may contain a negative sign and a decimal point.\n   * @static\n   * @param {String} string The string to convert to a number\n   * @return {String|Number} Returns a number if the string can be casted, otherwise returns the original string\n   */\n  parseFloat: function (string) {\n    const number = +string;\n    return typeof string === 'string' && number === parseFloat(string) ? number : string;\n  },\n\n  /**\n   * Convert a string to an integer if valid, otherwise return the string\n   * @static\n   * @param {String} string The string to convert to an integer\n   * @return {String|integer} Returns an integer if the string can be casted, otherwise, returns the original string\n   */\n  parseInt: function (string) {\n    const int = +string;\n    return oktaUnderscore.isString(string) && int === parseInt(string, 10) ? int : string;\n  },\n\n  /**\n   * Convert a string to an object if valid, otherwise return the string\n   * @static\n   * @param {String} string The string to convert to an object\n   * @return {String|object} Returns an object if the string can be casted, otherwise, returns the original string\n   */\n  parseObject: function (string) {\n    if (!oktaUnderscore.isString(string)) {\n      return string;\n    }\n\n    try {\n      const object = JSON.parse(string);\n      return oktaJQueryStatic.isPlainObject(object) ? object : string;\n    } catch (e) {\n      return string;\n    }\n  },\n\n  /**\n   * Returns a random string from [a-z][A-Z][0-9] of a given length\n   * @static\n   * @param {Number} length The length of the random string.\n   * @return {String} Returns a random string from [a-z][A-Z][0-9] of a given length\n   */\n  randomString: function (length) {\n    const characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';\n\n    if (length === undefined) {\n      length = oktaUnderscore.random(characters.length);\n    } else if (length === 0) {\n      return '';\n    }\n\n    const stringArray = [];\n\n    while (length--) {\n      stringArray.push(characters[oktaUnderscore.random(characters.length - 1)]);\n    }\n\n    return stringArray.join('');\n  },\n\n  /**\n   * Returns if a str ends with another string\n   * @static\n   * @param {String} str The string to search\n   * @param {String} ends The string it should end with\n   *\n   * @return {Boolean} Returns if the str ends with ends\n   */\n  endsWith: function (str, ends) {\n    str += '';\n    ends += '';\n    return str.length >= ends.length && str.substring(str.length - ends.length) === ends;\n  },\n\n  /** @static */\n  isEmail: function (str) {\n    const target = oktaJQueryStatic.trim(str);\n    return !oktaUnderscore.isEmpty(target) && emailValidator.test(target);\n  }\n};\n\nexport { StringUtil as default };\n","import oktaUnderscore from './underscore-wrapper.js';\nimport StringUtil from './StringUtil.js';\n\nconst loc = StringUtil.localize;\nconst SchemaUtils = {\n  STRING: 'string',\n  NUMBER: 'number',\n  INTEGER: 'integer',\n  BOOLEAN: 'boolean',\n  OBJECT: 'object',\n  FORMATDISPLAYTYPE: {\n    'date-time': 'date',\n    uri: 'uri',\n    email: 'email',\n    // TODO: settle on using EITHER underscores OR hyphens --- not both (OKTA-202818)\n    'country-code': 'country-code',\n    'language-code': 'language-code',\n    'country_code': 'country_code',\n    'language_code': 'language_code',\n    locale: 'locale',\n    timezone: 'timezone',\n    'ref-id': 'reference'\n  },\n  ARRAYDISPLAYTYPE: {\n    arrayofobject: 'arrayofobject',\n    arrayofstring: 'arrayofstring',\n    arrayofnumber: 'arrayofnumber',\n    arrayofinteger: 'arrayofinteger',\n    'arrayofref-id': 'arrayofref-id'\n  },\n  DISPLAYTYPES: {\n    date: {\n      type: 'string',\n      format: 'date-time'\n    },\n    uri: {\n      type: 'string',\n      format: 'uri'\n    },\n    email: {\n      type: 'string',\n      format: 'email'\n    },\n    // TODO: Resolve inconsistencies in hyphens vs. underscores for these properties (OKTA-202818)\n    // use country-code if attribute should be restricted to country code type\n    'country-code': {\n      type: 'string',\n      format: 'country-code'\n    },\n    'language-code': {\n      type: 'string',\n      format: 'language-code'\n    },\n    'country_code': {\n      type: 'string'\n    },\n    'language_code': {\n      type: 'string'\n    },\n    locale: {\n      type: 'string',\n      format: 'locale'\n    },\n    timezone: {\n      type: 'string',\n      format: 'timezone'\n    },\n    string: {\n      type: 'string'\n    },\n    number: {\n      type: 'number'\n    },\n    boolean: {\n      type: 'boolean'\n    },\n    integer: {\n      type: 'integer'\n    },\n    reference: {\n      type: 'string',\n      format: 'ref-id'\n    },\n    arrayofobject: {\n      type: 'array',\n      items: {\n        type: 'object'\n      }\n    },\n    arrayofstring: {\n      type: 'array',\n      items: {\n        type: 'string'\n      }\n    },\n    arrayofnumber: {\n      type: 'array',\n      items: {\n        type: 'number'\n      }\n    },\n    arrayofinteger: {\n      type: 'array',\n      items: {\n        type: 'integer'\n      }\n    },\n    'arrayofref-id': {\n      type: 'array',\n      items: {\n        type: 'string',\n        format: 'ref-id'\n      }\n    },\n    image: {\n      type: 'image'\n    },\n    password: {\n      type: 'string'\n    }\n  },\n  SUPPORTSMINMAX: ['string', 'number', 'integer', 'password'],\n  SUPPORTENUM: ['string', 'number', 'integer', 'object', 'arrayofstring', 'arrayofnumber', 'arrayofinteger', 'arrayofobject'],\n  DATATYPE: {\n    string: 'string',\n    number: 'number',\n    boolean: 'boolean',\n    integer: 'integer',\n    date: 'datetime',\n    object: 'object',\n    arrayofobject: 'object array',\n    arrayofstring: 'string array',\n    arrayofnumber: 'number array',\n    arrayofinteger: 'integer array',\n    'arrayofref-id': 'reference array',\n    // TODO: settle on using EITHER underscores OR hyphens --- not both (OKTA-202818)\n    'country-code': 'country code',\n    'language-code': 'language code',\n    'country_code': 'country code',\n    'language_code': 'language code',\n    reference: 'reference',\n    timezone: 'timezone',\n    image: 'image'\n  },\n  MUTABILITY: {\n    READONLY: 'READ_ONLY',\n    WRITEONLY: 'WRITE_ONLY',\n    READWRITE: 'READ_WRITE',\n    IMMUTABLE: 'IMMUTABLE'\n  },\n  SCOPE: {\n    NONE: 'NONE',\n    SELF: 'SELF',\n    SYSTEM: 'SYSTEM'\n  },\n  DISPLAYSCOPE: {\n    SELF: 'User personal',\n    SYSTEM: 'System',\n    NA: 'None'\n  },\n  UNION: {\n    DISABLE: 'DISABLE',\n    ENABLE: 'ENABLE'\n  },\n  UNION_OPTIONS: {\n    DISABLE: loc('universal-directory.profiles.attribute.form.union.enable.display', 'courage'),\n    ENABLE: loc('universal-directory.profiles.attribute.form.union.disable.display', 'courage')\n  },\n  PERMISSION: {\n    HIDE: 'HIDE',\n    READ_ONLY: 'READ_ONLY',\n    WRITE_ONLY: 'WRITE_ONLY',\n    READ_WRITE: 'READ_WRITE'\n  },\n  ENDUSER_ATTRIBUTE_PERMISSION_OPTIONS: {\n    HIDE: loc('universal-directory.profiles.attribute.enduser.permission.hide', 'courage'),\n    READ_ONLY: loc('universal-directory.profiles.attribute.enduser.permission.readonly', 'courage'),\n    READ_WRITE: loc('universal-directory.profiles.attribute.enduser.permission.readwrite', 'courage')\n  },\n  ATTRIBUTE_LEVEL_MASTERING_OPTIONS: {\n    INHERIT: loc('universal-directory.profiles.attribute.source.inherit', 'courage'),\n    // eslint-disable-next-line @okta/okta/no-exclusive-language\n    OKTA_MASTERED: loc('universal-directory.profiles.attribute.source.oktamastered', 'courage'),\n    OVERRIDE: loc('universal-directory.profiles.attribute.source.override', 'courage')\n  },\n  USERNAMETYPE: {\n    NONE: 'non-username',\n    OKTA_TO_APP: 'okta-to-app-username',\n    OKTA_TO_AD: 'okta-to-ad-username',\n    APP_TO_OKTA: 'app-to-okta-username',\n    IDP_TO_OKTA: 'idp-to-okta-username'\n  },\n  LOGINPATTERNFORMAT: {\n    EMAIL: 'EMAIL',\n    CUSTOM: 'CUSTOM',\n    NONE: 'NONE'\n  },\n  UNIQUENESS: {\n    NOT_UNIQUE: 'NOT_UNIQUE',\n    PENDING_UNIQUENESS: 'PENDING_UNIQUENESS',\n    UNIQUE_VALIDATED: 'UNIQUE_VALIDATED'\n  },\n\n  /*\n   * Get a display string for a schema attribute type.\n   * @param {String} type Type of an attribute\n   * @param {String} format Format of an attribute\n   * @param {String} itemType Item type of an attribute if an array\n   * @param {String} defaultValue The default value if an attribute type is undefined\n   * @return {String} the display value\n   */\n  getDisplayType: function (type, format, itemType, defaultValue) {\n    let displayType; // type is undefined for\n    // - an un-mapped source attribute from mapping\n    // - an source attribute which is mapped to username target attribute\n\n    if (type) {\n      // format is only defined for complicated types (ex. reference, date time, array)\n      // not for simple types (ex. string, integer, boolean)\n      if (format) {\n        displayType = this.FORMATDISPLAYTYPE[format];\n      } else {\n        // itemType is only defined for array type\n        // to specify an array element type (ex. string, integer, number)\n        displayType = itemType ? this.ARRAYDISPLAYTYPE[type + 'of' + itemType] : type;\n      }\n    }\n\n    if (!displayType) {\n      displayType = typeof defaultValue === 'undefined' ? '' : defaultValue;\n    }\n\n    return displayType;\n  },\n\n  /*\n   * Get attribute mapping source attribute username type\n   * @param {String} mappingDirection\n   * @param {String} targetName The mapping target attribute name\n   * @param {String} appName The app name that's mapped to/from Okta\n   * @return {String} the source attribute username type value\n   */\n  getSourceUsernameType: function (mappingDirection, targetName, appName) {\n    let sourceUsernameType = this.USERNAMETYPE.NONE;\n    /* eslint complexity: [2, 7] */\n\n    if (mappingDirection === 'oktaToApp') {\n      if (targetName === 'userName') {\n        sourceUsernameType = this.USERNAMETYPE.OKTA_TO_APP;\n      } else if (targetName === 'cn') {\n        sourceUsernameType = this.USERNAMETYPE.OKTA_TO_AD;\n      }\n    } else if (mappingDirection === 'appToOkta' && targetName === 'login') {\n      if (appName === 'saml_idp') {\n        sourceUsernameType = this.USERNAMETYPE.IDP_TO_OKTA;\n      } else {\n        sourceUsernameType = this.USERNAMETYPE.APP_TO_OKTA;\n      }\n    }\n\n    return sourceUsernameType;\n  },\n  isArrayDataType: function (type) {\n    return oktaUnderscore.contains(oktaUnderscore.values(this.ARRAYDISPLAYTYPE), type);\n  },\n  isObjectDataType: function (type) {\n    return this.DATATYPE.object === type;\n  }\n};\n\nexport { SchemaUtils as default };\n","import oktaJQueryStatic from '../../../util/jquery-wrapper.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport SchemaUtils from '../../../util/SchemaUtil.js';\nimport StringUtil from '../../../util/StringUtil.js';\n\n/* eslint max-statements: 0 */\nconst NAME = 'name';\nconst ENUM_KEY_PREFIX = '_enum_';\n/**\n * Generate Input Options in order to create an input in an Form for Enum type attribute.\n * @param {Object} config informations for creating input options\n *   config.name        schema property name\n *   config.title       schema property title\n *   config.readOnly    create an read only input?\n *   config.explain     sub-title to the input\n *   config.enumValues  list of enum values for creating input options (Dropdown/SimpleCheckBoxSet)\n *   config.displayType display type of schema property\n *\n * @return {Object} inputOptions options for create an Input view. (Dropdown/SimpleCheckBoxSet)\n *\n */\n\nfunction getEnumInputOptions(config) {\n  const enumOneOf = convertToOneOf(config.enumValues);\n  const inputOptions = {\n    name: config.name,\n    label: config.title,\n    readOnly: config.readOnly,\n    customExplain: config.explain,\n    params: {\n      enumOneOf: enumOneOf\n    },\n    options: getDropdownOptionsFromOneOf(enumOneOf)\n  }; // input type\n\n  if (SchemaUtils.isArrayDataType(config.displayType)) {\n    inputOptions.type = 'checkboxset';\n    inputOptions.to = valuesToEnumObjects;\n    inputOptions.from = enumObjectsToValues;\n  } else {\n    inputOptions.type = 'select';\n    inputOptions.to = valueToEnumObject;\n    inputOptions.from = enumObjectToValue;\n  }\n\n  inputOptions.input = null;\n  return inputOptions;\n}\n\nfunction getDropdownOptions(values) {\n  return oktaUnderscore.isArray(values) ? getDropdownOptionsFromOneOf(convertToOneOf(values)) : {};\n}\n\nfunction getDropdownOptionsFromOneOf(values) {\n  if (!isOneOfEnumObject(values)) {\n    return {};\n  }\n\n  return oktaUnderscore.reduce(values, function (options, value, index) {\n    options[convertIndexToEnumIndex(index)] = value.title;\n    return options;\n  }, {});\n}\n\nfunction convertToOneOf(values) {\n  // assume this is a legacy enum array and convert to oneOf object\n  if (!oktaUnderscore.all(values, oktaJQueryStatic.isPlainObject)) {\n    return convertEnumToOneOf(values); // we assume object without const and title is an enum object which need special conversion\n  } else if (!isOneOfEnumObject(values)) {\n    return convertEnumObjectToOneOf(values);\n  }\n\n  return values;\n}\n\nfunction isOneOfEnumObject(values) {\n  return oktaUnderscore.isArray(values) && oktaUnderscore.all(values, function (value) {\n    return oktaUnderscore.has(value, 'const') && oktaUnderscore.has(value, 'title');\n  });\n}\n\nfunction convertEnumToOneOf(values) {\n  return oktaUnderscore.map(values, function (value) {\n    return {\n      const: value,\n      title: valueToTitle(value)\n    };\n  });\n}\n\nfunction valueToTitle(value) {\n  if (oktaUnderscore.isObject(value)) {\n    return JSON.stringify(value);\n  }\n\n  if (oktaUnderscore.isNumber(value)) {\n    return value + '';\n  }\n\n  return value;\n}\n\nfunction convertEnumObjectToOneOf(values) {\n  const findKey = oktaUnderscore.partial(oktaUnderscore.has, oktaUnderscore, NAME); // If all object found the key NAME, use the NAME's value as display name\n\n\n  if (oktaUnderscore.all(values, findKey)) {\n    return oktaUnderscore.chain(values).filter(function (value) {\n      return oktaJQueryStatic.isPlainObject(value) && oktaUnderscore.has(value, NAME);\n    }).map(function (value) {\n      return {\n        const: value,\n        title: value[NAME]\n      };\n    }).value();\n  } // Assume a legacy object array does not need special handling and just convert to const/title enum\n\n\n  return convertEnumToOneOf(values);\n}\n\nfunction convertIndexToEnumIndex(index) {\n  return `${ENUM_KEY_PREFIX}${index}`;\n}\n\nfunction enumObjectToValue(obj) {\n  const index = oktaUnderscore.findIndex(this.options.params.enumOneOf, function (oneOfObj) {\n    return oktaUnderscore.isObject(obj) ? oktaUnderscore.isEqual(oneOfObj.const, obj) : oneOfObj.const === obj;\n  }); // Cannot rely on comparator in findIndex when compare objects so need special handling\n\n\n  return index > -1 ? convertIndexToEnumIndex(index) : obj;\n}\n\nfunction valueToEnumObject(val) {\n  if (!oktaUnderscore.isString(val) || val.indexOf(ENUM_KEY_PREFIX) !== 0) {\n    return val;\n  }\n\n  const index = val.replace(ENUM_KEY_PREFIX, '');\n  const enumValue = this.options.params && oktaUnderscore.isArray(this.options.params.enumOneOf) ? this.options.params.enumOneOf[index] : null; // @see `getEnumInputOptions` how enumValues has been set.\n\n  return oktaUnderscore.has(enumValue, 'const') ? enumValue.const : enumValue;\n}\n\nfunction valuesToEnumObjects(values) {\n  return oktaUnderscore.map(values, valueToEnumObject.bind(this));\n}\n\nfunction enumObjectsToValues(values) {\n  return oktaUnderscore.map(values, enumObjectToValue.bind(this));\n}\n\nfunction isStringConstraint(value) {\n  return oktaUnderscore.isString(value) && oktaJQueryStatic.trim(value) !== '';\n}\n\nfunction isNumberConstraint(value) {\n  return oktaUnderscore.isNumber(value) || oktaUnderscore.isNumber(StringUtil.parseFloat(oktaJQueryStatic.trim(value)));\n}\n\nfunction isIntegerConstraint(value) {\n  const integer = oktaUnderscore.isNumber(value) ? value : StringUtil.parseInt(oktaJQueryStatic.trim(value));\n  return typeof integer === 'number' && isFinite(integer) && Math.floor(integer) === integer;\n}\n\nfunction isObjectConstraint(value) {\n  if (oktaUnderscore.isObject(value) && !oktaUnderscore.isArray(value)) {\n    return true;\n  }\n\n  const object = StringUtil.parseObject(oktaJQueryStatic.trim(value));\n  return oktaUnderscore.isObject(object) && !oktaUnderscore.isArray(object);\n}\n\nfunction isConstraintValueMatchType(value, type) {\n  switch (type) {\n    case SchemaUtils.STRING:\n      return isStringConstraint(value);\n\n    case SchemaUtils.NUMBER:\n      return isNumberConstraint(value);\n\n    case SchemaUtils.INTEGER:\n      return isIntegerConstraint(value);\n\n    case SchemaUtils.OBJECT:\n      return isObjectConstraint(value);\n  }\n}\n\nvar EnumTypeHelper = {\n  getEnumInputOptions: getEnumInputOptions,\n  getDropdownOptions: getDropdownOptions,\n  convertToOneOf: convertToOneOf,\n  isConstraintValueMatchType: isConstraintValueMatchType\n};\n\nexport { EnumTypeHelper as default };\n","import oktaJQueryStatic from '../util/jquery-wrapper.js';\nimport oktaUnderscore from '../util/underscore-wrapper.js';\nimport BaseCollection from './BaseCollection.js';\nimport BaseModel from './BaseModel.js';\nimport Logger from '../util/Logger.js';\nimport SchemaUtils from '../util/SchemaUtil.js';\nimport StringUtil from '../util/StringUtil.js';\nimport EnumTypeHelper from '../views/forms/helpers/EnumTypeHelper.js';\n\n/* eslint-disable @okta/okta/no-exclusive-language */\nconst loc = StringUtil.localize;\nconst STRING = SchemaUtils.STRING;\nconst NUMBER = SchemaUtils.NUMBER;\nconst INTEGER = SchemaUtils.INTEGER;\nconst OBJECT = SchemaUtils.OBJECT;\n\nconst getArrayTypeName = function (type, elementType) {\n  return type + 'of' + elementType;\n};\n\nconst SchemaPropertySubSchema = BaseModel.extend({\n  defaults: {\n    description: undefined,\n    minLength: undefined,\n    maxLength: undefined,\n    format: undefined\n  },\n  parse: function (resp) {\n    if (oktaUnderscore.isString(resp.format)) {\n      const matcher = /^\\/(.+)\\/$/.exec(resp.format);\n\n      if (matcher) {\n        resp.format = matcher[1];\n      }\n    }\n\n    return resp;\n  }\n});\nconst SchemaPropertySubSchemaCollection = BaseCollection.extend({\n  model: SchemaPropertySubSchema\n});\nconst SchemaPropertySubSchemaAllOfCollection = SchemaPropertySubSchemaCollection.extend({\n  _type: 'allOf'\n});\nconst SchemaPropertySubSchemaOneOfCollection = SchemaPropertySubSchemaCollection.extend({\n  _type: 'oneOf'\n});\nconst SchemaPropertySubSchemaNoneOfCollection = SchemaPropertySubSchemaCollection.extend({\n  _type: 'noneOf'\n});\nconst constraintTypeErrorMessages = {\n  string: loc('schema.validation.field.value.must.string', 'courage'),\n  number: loc('schema.validation.field.value.must.number', 'courage'),\n  integer: loc('schema.validation.field.value.must.integer', 'courage'),\n  object: loc('schema.validation.field.value.must.object', 'courage')\n};\nconst loginFormatNonePattern = '.+';\nconst escapedLoginCharsRe = /[^a-zA-Z0-9-]/;\nconst constraintHandlers = {\n  between: '_checkBetweenConstraints',\n  greaterThan: '_checkGreaterThanConstraint',\n  lessThan: '_checkLessThanConstraint',\n  equals: '_checkEqualsConstraint'\n};\nconst SchemaPropertySchemaProperty = BaseModel.extend({\n  idAttribute: 'name',\n  local: {\n    __oneOf__: {\n      type: 'array',\n      minItems: 1\n    }\n  },\n  defaults: {\n    // OKTA-28445, set empty string by default as the key for each property when syncing with server\n    // so that server can respond with error when a name is not provided\n    name: '',\n    title: undefined,\n    type: undefined,\n    description: undefined,\n    required: false,\n    format: undefined,\n    // choose disable option be default.\n    union: undefined,\n    subSchemas: undefined,\n    settings: {\n      permissions: {\n        SELF: SchemaUtils.PERMISSION.READ_ONLY\n      }\n    },\n    unique: undefined,\n    __metadata__: undefined,\n    __isSensitive__: BaseModel.ComputedProperty(['settings'], function (settings) {\n      return !!(settings && settings.sensitive && settings.sensitive !== 'NOT_SENSITIVE');\n    }),\n    __isPendingSensitive__: BaseModel.ComputedProperty(['settings'], function (settings) {\n      return !!(settings && settings.sensitive && settings.sensitive === 'PENDING_SENSITIVE');\n    }),\n    __unique__: false,\n    __isUniqueValidated__: BaseModel.ComputedProperty(['unique'], function (unique) {\n      return unique === SchemaUtils.UNIQUENESS.UNIQUE_VALIDATED;\n    }),\n    __isPendingUniqueness__: BaseModel.ComputedProperty(['unique'], function (unique) {\n      return unique === SchemaUtils.UNIQUENESS.PENDING_UNIQUENESS;\n    }),\n    __isUniqueness__: BaseModel.ComputedProperty(['__isUniqueValidated__', '__isPendingUniqueness__'], function (isValidated, isPending) {\n      return isValidated || isPending;\n    }),\n    __canBeSensitive__: BaseModel.ComputedProperty(['__metadata__'], function (metadata) {\n      return !!(metadata && metadata.sensitivizable);\n    }),\n    __userPermission__: SchemaUtils.PERMISSION.READ_ONLY,\n    __displayType__: undefined,\n    __displayTypeLabel__: BaseModel.ComputedProperty(['__displayType__'], function (displayType) {\n      return SchemaUtils.DATATYPE[displayType] || displayType;\n    }),\n    __supportsMinMax__: false,\n    // use the private naming convention for these computed properties,\n    // to deal with the complexity in cloning schema with properties (toJSON({verbose: true})),\n    // to make sure these attributes are being excluded from api request\n    __isReadOnly__: BaseModel.ComputedProperty(['mutability'], function (mutability) {\n      return mutability === SchemaUtils.MUTABILITY.READONLY;\n    }),\n    __isWriteOnly__: BaseModel.ComputedProperty(['mutability'], function (mutability) {\n      return mutability === SchemaUtils.MUTABILITY.WRITEONLY;\n    }),\n    __displayScope__: undefined,\n    __isScopeSelf__: BaseModel.ComputedProperty(['scope'], function (scope) {\n      return scope === SchemaUtils.SCOPE.SELF;\n    }),\n    __isNoneScopeArrayType__: BaseModel.ComputedProperty(['__isScopeSelf__', '__displayType__'], function (isScopeSelf, displayType) {\n      return !isScopeSelf && SchemaUtils.isArrayDataType(displayType);\n    }),\n    __isImported__: BaseModel.ComputedProperty(['externalName'], function (externalName) {\n      return !!externalName;\n    }),\n    __isFromBaseSchema__: BaseModel.ComputedProperty(['__schemaMeta__'], function (schemaMeta) {\n      return schemaMeta && schemaMeta.name === 'base';\n    }),\n    // Only UI can turn on __enumDefined__ and reprocess the enum/oneOf value; otherwise,\n    // it should leave existing value untouch\n    __enumDefined__: false,\n    __supportEnum__: BaseModel.ComputedProperty(['__displayType__'], function (displayType) {\n      return oktaUnderscore.contains(SchemaUtils.SUPPORTENUM, displayType);\n    }),\n    __isNumberTypeEnum__: BaseModel.ComputedProperty(['__displayType__'], function (displayType) {\n      return oktaUnderscore.contains([SchemaUtils.NUMBER, SchemaUtils.ARRAYDISPLAYTYPE.arrayofnumber], displayType);\n    }),\n    __isIntegerTypeEnum__: BaseModel.ComputedProperty(['__displayType__'], function (displayType) {\n      return oktaUnderscore.contains([SchemaUtils.INTEGER, SchemaUtils.ARRAYDISPLAYTYPE.arrayofinteger], displayType);\n    }),\n    __isObjectTypeEnum__: BaseModel.ComputedProperty(['__displayType__'], function (displayType) {\n      return oktaUnderscore.contains([SchemaUtils.OBJECT, SchemaUtils.ARRAYDISPLAYTYPE.arrayofobject], displayType);\n    }),\n    __isStringTypeEnum__: BaseModel.ComputedProperty(['__displayType__'], function (displayType) {\n      return oktaUnderscore.contains([SchemaUtils.STRING, SchemaUtils.ARRAYDISPLAYTYPE.arrayofstring], displayType);\n    }),\n    __enumConstraintType__: BaseModel.ComputedProperty(['__isStringTypeEnum__', '__isNumberTypeEnum__', '__isIntegerTypeEnum__', '__isObjectTypeEnum__'], function (isStringType, isNumberType, isIntegerType, isObjectType) {\n      if (isStringType) {\n        return STRING;\n      }\n\n      if (isNumberType) {\n        return NUMBER;\n      }\n\n      if (isIntegerType) {\n        return INTEGER;\n      }\n\n      if (isObjectType) {\n        return OBJECT;\n      }\n    }),\n    __isEnumDefinedAndSupported__: BaseModel.ComputedProperty(['__enumDefined__', '__supportEnum__'], function (enumDefined, supportEnum) {\n      return enumDefined && supportEnum;\n    }),\n    __isLoginOfBaseSchema__: BaseModel.ComputedProperty(['__isFromBaseSchema__', 'name'], function (isFromBaseSchema, name) {\n      return isFromBaseSchema && name === 'login';\n    }),\n    __isLoginFormatRestrictionToEmail__: BaseModel.ComputedProperty(['__loginFormatRestriction__'], function (loginFormatRestriction) {\n      return loginFormatRestriction === SchemaUtils.LOGINPATTERNFORMAT.EMAIL;\n    })\n  },\n  initialize: function () {\n    BaseModel.prototype.initialize.apply(this, arguments);\n    this.listenTo(this, 'change:__displayType__', this._updateTypeFormatConstraints);\n    this.listenTo(this, 'change:type change:format change:items', this._updateDisplayType);\n    this.listenTo(this, 'change:__minVal__ change:__maxVal__', this._updateMinMax);\n    this.listenTo(this, 'change:__equals__', this._convertEqualsToMinMax);\n    this.listenTo(this, 'change:__constraint__', this._setConstraintText);\n\n    this._setConstraintText();\n\n    this._setLoginPattern();\n  },\n  parse: function (resp) {\n    /* eslint complexity: [2, 9] */\n    resp = oktaUnderscore.clone(resp);\n\n    if (resp.type === 'object' && resp.extendedType === 'image') {\n      resp.type = 'image';\n    }\n\n    resp['__displayType__'] = SchemaUtils.getDisplayType(resp.type, resp.format, resp.items ? resp.items.format ? resp.items.format : resp.items.type : undefined);\n\n    this._setRangeConstraints(resp);\n\n    resp['__supportsMinMax__'] = SchemaUtils.SUPPORTSMINMAX.indexOf(resp['__displayType__']) !== -1;\n    resp['__displayScope__'] = SchemaUtils.DISPLAYSCOPE[resp.scope] || SchemaUtils.DISPLAYSCOPE.NA;\n\n    if (resp.settings && resp.settings.permissions && resp.settings.permissions.SELF) {\n      resp['__userPermission__'] = resp.settings.permissions.SELF;\n    }\n\n    this._setMasterOverride(resp);\n\n    this._setSubSchemas(resp);\n\n    this._setUniqueness(resp);\n\n    return resp;\n  },\n  validate: function () {\n    const enumValidationError = this._validateEnumOneOf();\n\n    if (enumValidationError) {\n      return enumValidationError;\n    }\n\n    if (!this.get('__supportsMinMax__') || !this.get('__constraint__')) {\n      return undefined;\n    }\n\n    const constraitType = this.get('__constraint__');\n    const constraitHandler = this[constraintHandlers[constraitType]];\n\n    if (oktaUnderscore.isFunction(constraitHandler)) {\n      return constraitHandler.call(this);\n    } else {\n      Logger.warn('No constraint handler found for: ' + constraitType);\n      return undefined;\n    }\n  },\n  _checkBetweenConstraints: function () {\n    const minVal = this.get('__minVal__');\n    const maxVal = this.get('__maxVal__');\n\n    if (!minVal && !maxVal) {\n      return;\n    }\n\n    if (!minVal) {\n      return {\n        __minVal__: 'Min value is required'\n      };\n    }\n\n    if (!maxVal) {\n      return {\n        __maxVal__: 'Max value is required'\n      };\n    }\n\n    let val = this._checkIntegerConstraints('__minVal__', 'Min value');\n\n    if (val) {\n      return val;\n    }\n\n    val = this._checkIntegerConstraints('__maxVal__', 'Max value');\n\n    if (val) {\n      return val;\n    }\n\n    if (+minVal >= +maxVal) {\n      return {\n        __maxVal__: 'Max val must be greater than min val'\n      };\n    }\n  },\n  _checkGreaterThanConstraint: function () {\n    const minVal = this.get('__minVal__');\n\n    if (!minVal) {\n      return;\n    }\n\n    const val = this._checkIntegerConstraints('__minVal__', 'Min value');\n\n    if (val) {\n      return val;\n    }\n  },\n  _checkLessThanConstraint: function () {\n    const maxVal = this.get('__maxVal__');\n\n    if (!maxVal) {\n      return;\n    }\n\n    const val = this._checkIntegerConstraints('__maxVal__', 'Max value');\n\n    if (val) {\n      return val;\n    }\n  },\n  _checkEqualsConstraint: function () {\n    const equals = this.get('__equals__');\n\n    if (!equals) {\n      return;\n    }\n\n    const val = this._checkIntegerConstraints('__equals__', 'Constraint');\n\n    if (val) {\n      return val;\n    }\n  },\n  _checkIntegerConstraints: function (field, name) {\n    const val = this.get(field);\n    const error = {}; // eslint-disable-next-line no-restricted-globals\n\n    if (isNaN(val)) {\n      error[field] = name + ' must be a number';\n      return error;\n    }\n\n    if (+val < 0) {\n      error[field] = name + ' must be greater than 0';\n      return error;\n    }\n  },\n  _setMasterOverride: function (resp) {\n    if (resp.settings && resp.settings.masterOverride && resp.settings.masterOverride) {\n      const masterOverrideValue = resp.settings.masterOverride.value;\n\n      if (oktaUnderscore.isArray(masterOverrideValue) && !oktaUnderscore.isEmpty(masterOverrideValue)) {\n        resp['__masterOverrideType__'] = 'OVERRIDE';\n        resp['__masterOverrideValue__'] = masterOverrideValue || [];\n      } else {\n        resp['__masterOverrideType__'] = resp.settings.masterOverride.type;\n      }\n    } else {\n      resp['__masterOverrideType__'] = 'INHERIT';\n    }\n  },\n  _setRangeConstraints: function (resp) {\n    /* eslint complexity: [2, 11] */\n    if (resp['__displayType__'] === STRING) {\n      resp['__minVal__'] = resp.minLength;\n      resp['__maxVal__'] = resp.maxLength;\n    } else if (resp['__displayType__'] === INTEGER || resp['__displayType__'] === NUMBER) {\n      resp['__minVal__'] = resp.minimum;\n      resp['__maxVal__'] = resp.maximum;\n    }\n\n    if (resp['__minVal__'] && resp['__maxVal__']) {\n      if (resp['__minVal__'] === resp['__maxVal__']) {\n        resp['__constraint__'] = 'equals';\n        resp['__equals__'] = resp['__minVal__'];\n      } else {\n        resp['__constraint__'] = 'between';\n      }\n    } else if (!resp['__minVal__'] && resp['__maxVal__']) {\n      resp['__constraint__'] = 'lessThan';\n    } else if (!resp['__maxVal__'] && resp['__minVal__']) {\n      resp['__constraint__'] = 'greaterThan';\n    }\n  },\n  _setSubSchemas: function (resp) {\n    if (resp.allOf) {\n      resp['subSchemas'] = new SchemaPropertySubSchemaAllOfCollection(resp.allOf, {\n        parse: true\n      });\n    } else if (resp.oneOf) {\n      resp['subSchemas'] = new SchemaPropertySubSchemaOneOfCollection(resp.oneOf, {\n        parse: true\n      });\n    } else if (resp.noneOf) {\n      resp['subSchemas'] = new SchemaPropertySubSchemaNoneOfCollection(resp.noneOf, {\n        parse: true\n      });\n    }\n  },\n  _setUniqueness: function (resp) {\n    const unique = resp && resp.unique;\n    resp['__unique__'] = !!(unique && (unique === SchemaUtils.UNIQUENESS.UNIQUE_VALIDATED || unique === SchemaUtils.UNIQUENESS.PENDING_UNIQUENESS));\n  },\n  _setLoginPattern: function () {\n    if (!this.get('__isLoginOfBaseSchema__')) {\n      return;\n    }\n\n    const pattern = this.get('pattern');\n\n    if (pattern === loginFormatNonePattern) {\n      this.set('__loginFormatRestriction__', SchemaUtils.LOGINPATTERNFORMAT.NONE);\n    } else if (pattern) {\n      this.set('__loginFormatRestriction__', SchemaUtils.LOGINPATTERNFORMAT.CUSTOM);\n      this.set('__loginFormatRestrictionCustom__', this._extractLoginPattern(pattern));\n    } else {\n      this.set('__loginFormatRestriction__', SchemaUtils.LOGINPATTERNFORMAT.EMAIL);\n    }\n  },\n  _updateDisplayType: function () {\n    const type = this.get('type');\n\n    if (type === STRING && this.get('format')) {\n      this.set('__displayType__', SchemaUtils.FORMATDISPLAYTYPE[this.get('format')]);\n    } else {\n      const items = this.get('items');\n      const arraytype = items && (items.format ? items.format : items.type);\n\n      if (type && arraytype) {\n        this.set('__displayType__', SchemaUtils.ARRAYDISPLAYTYPE[getArrayTypeName(type, arraytype)]);\n      } else {\n        this.set('__displayType__', type);\n      }\n    }\n  },\n  _validateEnumOneOf: function () {\n    if (!this.get('__isEnumDefinedAndSupported__')) {\n      return;\n    }\n\n    const enumOneOf = this.get('__oneOf__') || [];\n\n    if (oktaUnderscore.isEmpty(enumOneOf)) {\n      return {\n        __oneOf__: loc('model.validation.field.blank', 'courage')\n      };\n    }\n\n    if (!this._isValidateOneOfConstraint(enumOneOf)) {\n      const constraintType = this.get('__enumConstraintType__');\n      const errorTypeMsg = constraintTypeErrorMessages[constraintType];\n      return {\n        __oneOf__: errorTypeMsg\n      };\n    }\n  },\n  _isValidateOneOfConstraint: function (values) {\n    const constraintType = this.get('__enumConstraintType__');\n    return oktaUnderscore.all(values, function (value) {\n      return EnumTypeHelper.isConstraintValueMatchType(value.const, constraintType);\n    });\n  },\n  toJSON: function () {\n    let json = BaseModel.prototype.toJSON.apply(this, arguments);\n    json.settings = {\n      permissions: {}\n    };\n    json.settings.permissions['SELF'] = this.get('__userPermission__'); // omit \"sensitive\" filed will have default it value to false.\n\n    if (this.get('__isSensitive__')) {\n      json.settings.sensitive = this.get('__isSensitive__');\n    }\n\n    if (this.get('type') === 'image') {\n      json.type = 'object';\n      json.extendedType = 'image';\n    }\n\n    json = this._enumAssignment(json);\n    json = this._attributeOverrideToJson(json);\n    json = this._normalizeUnionValue(json);\n    json = this._patternAssignment(json);\n    json = this._uniquenessAssignment(json);\n    return json;\n  },\n  _attributeOverrideToJson: function (json) {\n    const masterOverrideType = this.get('__masterOverrideType__');\n    const masterOverrideValue = this.get('__masterOverrideValue__');\n\n    if (masterOverrideType === 'OKTA_MASTERED') {\n      json.settings.masterOverride = {\n        type: 'OKTA_MASTERED'\n      };\n    } else if (masterOverrideType === 'OVERRIDE') {\n      json.settings.masterOverride = {\n        type: 'ORDERED_LIST',\n        value: []\n      };\n\n      if (masterOverrideValue instanceof BaseCollection) {\n        oktaUnderscore.each(masterOverrideValue.toJSON(), function (overrideProfile) {\n          json.settings.masterOverride.value.push(overrideProfile.id);\n        });\n      } else if (masterOverrideValue instanceof Array) {\n        json.settings.masterOverride.value = masterOverrideValue;\n      }\n\n      if (oktaUnderscore.isEmpty(json.settings.masterOverride.value)) {\n        delete json.settings.masterOverride;\n      }\n    }\n\n    if (masterOverrideType === 'INHERIT') {\n      delete json.settings.masterOverride;\n    }\n\n    return json;\n  },\n\n  /**\n   * Only allow set \"union\" value when isScopeSelf is NONE and displayType is\n   * array of (string/number/integer), otherwise reset to default.\n   *\n   * @see /universal-directory/shared/views/components/UnionGroupValuesRadio.js\n   */\n  _normalizeUnionValue: function (json) {\n    if (!this.get('__isNoneScopeArrayType__')) {\n      json['union'] = undefined;\n    }\n\n    return json;\n  },\n  _enumAssignment: function (json) {\n    if (!this.get('__isEnumDefinedAndSupported__')) {\n      return json;\n    } // backfill empty title by constraint\n\n\n    const enumOneOf = this._getEnumOneOfWithTitleCheck();\n\n    if (this.get('type') === 'array') {\n      delete json.items.enum;\n      json.items.oneOf = enumOneOf;\n    } else {\n      delete json.enum;\n      json.oneOf = enumOneOf;\n    }\n\n    return json;\n  },\n  _patternAssignment: function (json) {\n    if (!this.get('__isLoginOfBaseSchema__') || !this.get('__loginFormatRestriction__')) {\n      return json;\n    }\n\n    switch (this.get('__loginFormatRestriction__')) {\n      case SchemaUtils.LOGINPATTERNFORMAT.EMAIL:\n        delete json.pattern;\n        break;\n\n      case SchemaUtils.LOGINPATTERNFORMAT.CUSTOM:\n        json.pattern = this._buildLoginPattern(this.get('__loginFormatRestrictionCustom__'));\n        break;\n\n      case SchemaUtils.LOGINPATTERNFORMAT.NONE:\n        json.pattern = loginFormatNonePattern;\n        break;\n    }\n\n    return json;\n  },\n  _uniquenessAssignment: function (json) {\n    if (!this.get('__unique__')) {\n      delete json.unique;\n    } else if (!this.get('__isUniqueness__')) {\n      json.unique = SchemaUtils.UNIQUENESS.UNIQUE_VALIDATED;\n    }\n\n    return json;\n  },\n\n  /**\n   * Character should be escaped except letters, digits and hyphen\n   */\n  _escapedRegexChar: function (pattern, index) {\n    const char = pattern.charAt(index);\n\n    if (escapedLoginCharsRe.test(char)) {\n      return '\\\\' + char;\n    }\n\n    return char;\n  },\n  _buildLoginPattern: function (pattern) {\n    let result = '';\n\n    for (var i = 0; i < pattern.length; i++) {\n      result += this._escapedRegexChar(pattern, i);\n    }\n\n    return '[' + result + ']+';\n  },\n  _extractLoginPattern: function (pattern) {\n    const re = /^\\[(.*)\\]\\+/;\n    const matches = pattern.match(re);\n    return matches ? matches[1].replace(/\\\\(.)/g, '$1') : pattern;\n  },\n  _getEnumOneOfWithTitleCheck: function () {\n    const enumOneOf = this.get('__oneOf__');\n    return oktaUnderscore.map(enumOneOf, function (value) {\n      if (oktaJQueryStatic.trim(value.title) !== '') {\n        return value;\n      }\n\n      value.title = !oktaUnderscore.isString(value.const) ? JSON.stringify(value.const) : value.const;\n      return value;\n    });\n  },\n  _updateTypeFormatConstraints: function () {\n    const displayType = this.get('__displayType__'); // OKTA-31952 reset format according to its displayType\n\n    this.unset('format', {\n      silent: true\n    });\n    this.unset('items', {\n      silent: true\n    });\n    this.set(SchemaUtils.DISPLAYTYPES[displayType]);\n\n    if (displayType !== NUMBER && displayType !== INTEGER) {\n      this.unset('minimum');\n      this.unset('maximum');\n    }\n\n    if (displayType !== STRING) {\n      this.unset('minLength');\n      this.unset('maxLength');\n    }\n\n    this.unset('__minVal__');\n    this.unset('__maxVal__');\n    this.unset('__equals__');\n    this.set('__supportsMinMax__', SchemaUtils.SUPPORTSMINMAX.indexOf(this.get('__displayType__')) !== -1);\n  },\n  _updateMinMax: function () {\n    let min;\n    let max;\n    const displayType = this.get('__displayType__');\n\n    if (displayType === STRING) {\n      min = 'minLength';\n      max = 'maxLength';\n    } else if (displayType === INTEGER || displayType === NUMBER) {\n      min = 'minimum';\n      max = 'maximum';\n    }\n\n    if (this.get('__minVal__')) {\n      this.set(min, parseInt(this.get('__minVal__'), 10));\n    } else {\n      this.unset(min);\n    }\n\n    if (this.get('__maxVal__')) {\n      this.set(max, parseInt(this.get('__maxVal__'), 10));\n    } else {\n      this.unset(max);\n    }\n  },\n  _convertEqualsToMinMax: function () {\n    const equals = this.get('__equals__');\n\n    if (equals) {\n      this.set('__minVal__', equals);\n      this.set('__maxVal__', equals);\n    }\n  },\n\n  /*\n   Normally we would use a derived property here but derived properties do not work with the model Clone function\n   so we use this workaround instead.\n   */\n  _setConstraintText: function () {\n    const constraint = this.get('__constraint__');\n    const min = this.get('__minVal__');\n    const max = this.get('__maxVal__');\n    const equals = this.get('__equals__');\n\n    switch (constraint) {\n      case 'between':\n        this.set('__constraintText__', 'Between ' + min + ' and ' + max);\n        break;\n\n      case 'greaterThan':\n        this.set('__constraintText__', 'Greater than ' + min);\n        break;\n\n      case 'lessThan':\n        this.set('__constraintText__', 'Less than ' + max);\n        break;\n\n      case 'equals':\n        this.set('__constraintText__', 'Equals ' + equals);\n        break;\n\n      default:\n        this.set('__constraintText__', '');\n        break;\n    }\n  },\n  cleanup: function () {\n    if (this.get('__constraint__') === 'lessThan') {\n      this.unset('__minVal__');\n    } else if (this.get('__constraint__') === 'greaterThan') {\n      this.unset('__maxVal__');\n    }\n\n    if (this.get('scope') !== SchemaUtils.SCOPE.SYSTEM) {\n      if (this.get('__isScopeSelf__') === true) {\n        this.set({\n          scope: SchemaUtils.SCOPE.SELF\n        }, {\n          silent: true\n        });\n      } else {\n        this.unset('scope');\n      }\n    }\n\n    if (!this.get('__unique__')) {\n      this.unset('unique');\n    }\n  },\n\n  /**\n   * Since there is not an dedicated attribute to flag enum type,\n   * use enum values to determine whether the property is enum type or not.\n   */\n  isEnumType: function () {\n    return !!this.getEnumValues();\n  },\n  getEnumValues: function () {\n    return this.get('oneOf') || this.get('enum') || this.get('items') && this.get('items')['oneOf'] || this.get('items') && this.get('items')['enum'];\n  },\n  detectHasEnumDefined: function () {\n    const enumValues = this.getEnumValues();\n\n    if (!enumValues) {\n      return;\n    }\n\n    this.set('__oneOf__', EnumTypeHelper.convertToOneOf(enumValues));\n    this.set('__enumDefined__', true);\n  }\n});\nconst SchemaPropertySchemaProperties = BaseCollection.extend({\n  model: SchemaPropertySchemaProperty,\n  clone: function () {\n    return new this.constructor(this.toJSON({\n      verbose: true\n    }), {\n      parse: true\n    });\n  },\n  areAllReadOnly: function () {\n    return oktaUnderscore.all(this.pluck('__isReadOnly__'));\n  },\n  createModelProperties: function () {\n    return this.reduce(function (p, schemaProperty) {\n      const type = schemaProperty.get('type');\n      p[schemaProperty.id] = oktaUnderscore.clone(SchemaUtils.DISPLAYTYPES[type]);\n\n      if (SchemaUtils.SUPPORTSMINMAX.indexOf(type) !== -1) {\n        p[schemaProperty.id].minLength = schemaProperty.get('minLength');\n        p[schemaProperty.id].maxLength = schemaProperty.get('maxLength');\n      }\n\n      if (type === 'string') {\n        p[schemaProperty.id].format = schemaProperty.get('format');\n      }\n\n      return p;\n    }, {});\n  }\n});\nvar SchemaProperty = {\n  Model: SchemaPropertySchemaProperty,\n  Collection: SchemaPropertySchemaProperties\n};\n\nexport { SchemaProperty as default };\n","import oktaUnderscore from '../util/underscore-wrapper.js';\nimport BaseCollection from './BaseCollection.js';\nimport BaseModel from './BaseModel.js';\nimport SchemaProperty from './SchemaProperty.js';\n\nconst parseProperties = function (resp) {\n  const schemaMeta = oktaUnderscore.pick(resp, 'id', 'name', 'displayName');\n\n  const properties = oktaUnderscore.map(resp.schema.properties, function (property, name) {\n    return oktaUnderscore.extend({\n      name: name\n    }, property);\n  });\n\n  oktaUnderscore.each(properties, function (property) {\n    property['__schemaMeta__'] = schemaMeta;\n\n    if (property.__metadata) {\n      property['__metadata__'] = property.__metadata;\n      delete property.__metadata;\n    }\n  });\n\n  return properties;\n};\n\nconst BaseSchemaSchema = BaseModel.extend({\n  defaults: {\n    id: undefined,\n    displayName: undefined,\n    name: undefined\n  },\n  constructor: function () {\n    this.properties = new SchemaProperty.Collection();\n    BaseModel.apply(this, arguments);\n  },\n  getProperties: function () {\n    return this.properties;\n  },\n  clone: function () {\n    const model = BaseModel.prototype.clone.apply(this, arguments);\n    model.getProperties().set(this.getProperties().toJSON({\n      verbose: true\n    }));\n    return model;\n  },\n  parse: function (resp) {\n    const properties = parseProperties(resp);\n    this.properties.set(properties, {\n      parse: true\n    });\n    return oktaUnderscore.omit(resp, 'schema');\n  },\n  trimProperty: function (property) {\n    return oktaUnderscore.omit(property, 'name');\n  },\n  toJSON: function () {\n    const json = BaseModel.prototype.toJSON.apply(this, arguments);\n    json.schema = {\n      properties: {}\n    };\n    this.getProperties().each(function (model) {\n      const property = model.toJSON();\n      json.schema.properties[property.name] = this.trimProperty(property);\n    }, this);\n    return json;\n  },\n  save: function () {\n    this.getProperties().each(function (model) {\n      model.cleanup();\n    });\n    return BaseModel.prototype.save.apply(this, arguments);\n  }\n});\nconst BaseSchemaSchemas = BaseCollection.extend({\n  model: BaseSchemaSchema\n});\nvar BaseSchema = {\n  parseProperties: parseProperties,\n  Model: BaseSchemaSchema,\n  Collection: BaseSchemaSchemas\n};\n\nexport { BaseSchema as default };\n","function log(level, ...args) {\n  if (window.console && window.okta && window.okta.debug) {\n    window.console[level](...args);\n  }\n}\n/**\n * Utility library of logging functions.\n * @class module:Okta.Logger\n */\n\n\nvar Logger = /** @lends module:Okta.Logger */\n{\n  /**\n   * See [console.trace](https://developer.mozilla.org/en-US/docs/Web/API/Console.trace)\n   * @static\n   */\n  trace: function (...args) {\n    return log('trace', ...args);\n  },\n\n  /**\n   * See [console.dir](https://developer.mozilla.org/en-US/docs/Web/API/Console.dir)\n   * @static\n   */\n  dir: function (...args) {\n    return log('dir', ...args);\n  },\n\n  /**\n   * See [console.time](https://developer.mozilla.org/en-US/docs/Web/API/Console.time)\n   * @static\n   */\n  time: function (...args) {\n    return log('time', ...args);\n  },\n\n  /**\n   * See [console.timeEnd](https://developer.mozilla.org/en-US/docs/Web/API/Console.timeEnd)\n   * @static\n   */\n  timeEnd: function (...args) {\n    return log('timeEnd', ...args);\n  },\n\n  /**\n   * See [console.group](https://developer.mozilla.org/en-US/docs/Web/API/Console.group)\n   * @static\n   */\n  group: function (...args) {\n    return log('group', ...args);\n  },\n\n  /**\n   * See [console.groupEnd](https://developer.mozilla.org/en-US/docs/Web/API/Console.groupEnd)\n   * @static\n   */\n  groupEnd: function (...args) {\n    return log('groupEnd', ...args);\n  },\n\n  /**\n   * See [console.assert](https://developer.mozilla.org/en-US/docs/Web/API/Console.assert)\n   * @static\n   */\n  assert: function (...args) {\n    return log('assert', ...args);\n  },\n\n  /**\n   * See [console.log](https://developer.mozilla.org/en-US/docs/Web/API/Console.log)\n   * @static\n   */\n  log: function (...args) {\n    return log('log', ...args);\n  },\n\n  /**\n   * See [console.info](https://developer.mozilla.org/en-US/docs/Web/API/Console.info)\n   * @static\n   */\n  info: function (...args) {\n    return log('info', ...args);\n  },\n\n  /**\n   * See [console.warn](https://developer.mozilla.org/en-US/docs/Web/API/Console.warn)\n   * @static\n   */\n  warn: function (...args) {\n    return log('warn', ...args);\n  },\n\n  /**\n   * See [console.error](https://developer.mozilla.org/en-US/docs/Web/API/Console.error)\n   * @static\n   */\n  error: function (...args) {\n    return log('error', ...args);\n  }\n};\n\nexport { Logger as default };\n","import oktaUnderscore from './underscore-wrapper.js';\nimport Model from '../models/Model.js';\n\n/**\n * @class SettingsModel\n * @extends {Okta.Model}\n * @private\n */\nconst props = {\n  local: function () {\n    const settings = window.okta && window.okta.settings || {};\n    const theme = window.okta && window.okta.theme || '';\n    return {\n      orgId: ['string', false, settings.orgId],\n      orgName: ['string', false, settings.orgName],\n      serverStatus: ['string', false, settings.serverStatus],\n      persona: ['string', false, settings.persona],\n      isDeveloperConsole: ['boolean', false, settings.isDeveloperConsole],\n      isPreview: ['boolean', false, settings.isPreview],\n      permissions: ['array', true, settings.permissions || []],\n      theme: ['string', false, theme]\n    };\n  },\n  constructor: function () {\n    Model.apply(this, arguments);\n    this.features = window._features || [];\n  },\n\n  /**\n   * Checks if the user have a feature flag enabled (Based of the org level feature flag)\n   * @param  {String}  feature Feature name\n   * @return {Boolean}\n   */\n  hasFeature: function (feature) {\n    return oktaUnderscore.contains(this.features, feature);\n  },\n\n  /**\n   * Checks if any of the given feature flags are enabled (Based of the org level feature flags)\n   * @param  {Array}  featureArray Features names\n   * @return {Boolean} true if any of the give features are enabled. False otherwise\n   */\n  hasAnyFeature: function (featureArray) {\n    return oktaUnderscore.some(featureArray, this.hasFeature, this);\n  },\n\n  /**\n   * Checks if the user have a specific permission (based on data passed from JSP)\n   * @param  {String}  permission Permission name\n   * @return {Boolean}\n   */\n  hasPermission: function (permission) {\n    return oktaUnderscore.contains(this.get('permissions'), permission);\n  },\n\n  /**\n   * Checks if the org has ds theme set\n   * @return {Boolean}\n   */\n  isDsTheme: function () {\n    return this.get('theme') === 'dstheme';\n  }\n};\nvar SettingsModel = Model.extend(props);\n\nexport { SettingsModel as default };\n","import oktaUnderscore from '../util/underscore-wrapper.js';\nimport Backbone from '../vendor/lib/backbone.js';\n\nvar CHILDREN = '__children__';\nvar RENDERED = '__rendered__';\nvar PARENT = '__parent__';\nvar CHILD_DEFINITIONS = '__children_definitions__';\nvar ADD_TO_CONTAINER = '__add_to_container__';\n\nfunction getIndex(container, view) {\n  for (var i = 0; i < container[CHILDREN].length; i++) {\n    if (view.cid === container[CHILDREN][i].cid) {\n      return i;\n    }\n  }\n}\n\nfunction noop() {}\n\nfunction doRender(view) {\n  view[RENDERED] = true;\n  var html = view.renderTemplate(view.template);\n\n  if (html) {\n    view.$el.html(html);\n  } else if (view.length) {\n    view.$el.empty();\n  }\n\n  view.each(function (view) {\n    view[ADD_TO_CONTAINER]();\n  });\n}\n\nfunction subscribeEvents(view) {\n  var isEventPropertyRe = /^(?!(?:delegate|undelegate|_))([a-zA-Z0-9]+)(?:Events)$/;\n\n  oktaUnderscore.each(oktaUnderscore.allKeys(view), function (key) {\n    var matchKeys = key.match(isEventPropertyRe);\n\n    if (!matchKeys) {\n      return;\n    }\n\n    var bindings = oktaUnderscore.result(view, key);\n\n    var entity = view.options[matchKeys[1]] || view[matchKeys[1]];\n\n    if (!entity || !oktaUnderscore.isObject(bindings) || !oktaUnderscore.isFunction(entity.trigger)) {\n      return;\n    }\n\n    oktaUnderscore.each(bindings, function (callback, event) {\n      var callbacks = oktaUnderscore.isFunction(callback) ? [callback] : oktaUnderscore.reduce(callback.split(/\\s+/), (arr, name) => {\n        if (oktaUnderscore.isFunction(view[name])) {\n          arr.push(view[name]);\n        }\n\n        return arr;\n      }, []);\n\n      oktaUnderscore.each(callbacks, function (cb) {\n        view.listenTo(entity, event, cb);\n      });\n    });\n  });\n}\n/**\n   * A View operates on a string template, an token based template, or a model based template, with a few added hooks.\n   * It provides a collection of child views, when a child view could be a View or another View.\n   * Conceptually, if we were in a file system, the View is a folder, when the concrete child views are files,\n   * and the child Views are sub folders.\n   *\n   * *Technically, when using a View as a container, it could have its own concrete logic,\n   * but conceptually we like to keep it separated so a view is either a concrete view or a collection of child views.*\n   *\n   * In addition to the standard backbone options, we added `settings` and `state` as first class options.\n   * it will automatically assign `options` to `this.options` as an instance member.\n   *\n   * See [Backbone.View](http://backbonejs.org/#View).\n   *\n   * @class src/framework/View\n   * @extends external:Backbone.View\n   * @param {Object} [options] options hash\n   * @example\n   * var DocumentView = Archer.View.extend({\n   *   template: [\n   *     '<header></header>',\n   *     '<article></article>',\n   *     '<footer></footer>'\n   *   ].join(''),\n   *   children: [[HeaderView, 'header'], [ContentView, 'article'], [FooterView, 'footer']]\n   * });\n   */\n\n\nlet View;\nconst proto = {\n  /**\n     * An object listing events and callback bind to this.{entity}\n     * @name *Events\n     * @memberof src/framework/View\n     * @type {(Object|Function)}\n     * @instance\n     * @example\n     * var FooView = View.extend({\n     *   modelEvents: {\n     *     'change:name': 'render'\n     *   }\n     * })\n     * //equivalent to ==>\n     * var FooView = View.extend({\n     *   initialize: function() {\n     *     this.listenTo(this.model, 'change:name', this.render);\n     *   }\n     * });\n     *\n     *\n     * //Multiple callbacks:\n     * var FooView = View.extend({\n     *   modelEvents: {\n     *     'change:name': 'render foo'\n     *   },\n     *   foo: function() {}\n     * });\n     *\n     * //Callbacks As Function:\n     * var FooView = View.extend({\n     *   stateEvents: {\n     *     'change': function() {\n     *   }\n     * });\n     *\n     * //Event Configuration As Function\n     * var FooView = View.extend({\n     *   collectionEvents: function() {\n     *     var events = { 'change:name deleteItem': 'render' };\n     *     events['changeItem'] = 'spin';\n     *     events['addItem'] = function() {};\n     *     return events;\n     *   }\n     * });\n     */\n  preinitialize: function (options) {\n    /* eslint max-statements: [2, 17] */\n    this.options = options || {};\n\n    oktaUnderscore.extend(this, oktaUnderscore.pick(this.options, 'state', 'settings')); // init per-instance children collection\n\n\n    this[CHILDREN] = [];\n    this[RENDERED] = false;\n    this[PARENT] = null;\n    this[CHILD_DEFINITIONS] = this.children; // we want to make sure initialize is triggered *after* we append the views from the `this.views` array\n    // FIXME:\n    // It's actually can be done by override initialize method\n    //  initialize() { run extra login; super.initialize(); }\n    // BUT the problem is child classes would override initialize without invoke super.\n    // hence we have to also looking into (refactoring) ALL child classes.\n\n    this.__original_initialize__ = this.initialize;\n    this.initialize = noop;\n  },\n  constructor: function (options, ...rest) {\n    Backbone.View.call(this, options);\n\n    oktaUnderscore.each(oktaUnderscore.result(this, CHILD_DEFINITIONS), function (childDefinition) {\n      this.add.apply(this, oktaUnderscore.isArray(childDefinition) ? childDefinition : [childDefinition]);\n    }, this);\n\n    delete this[CHILD_DEFINITIONS];\n\n    const autoRender = oktaUnderscore.result(this, 'autoRender');\n\n    if (autoRender && this.model) {\n      var event = oktaUnderscore.isArray(autoRender) ? oktaUnderscore.map(autoRender, function (field) {\n        return 'change:' + field;\n      }).join(' ') : 'change';\n      this.listenTo(this.model, event, function () {\n        this.render();\n      });\n    }\n\n    this.initialize = this.__original_initialize__;\n    this.initialize.call(this, options, ...rest); // initialize in child class may have any number of parameters\n\n    subscribeEvents(this);\n  },\n\n  /**\n     * Unregister view from container\n     * Note: this will not remove the view from the dom\n     * and will not call the `remove` method on the view\n     *\n     * @param {src/framework/View} view the view to unregister\n     * @private\n     */\n  unregister: function (view) {\n    this.stopListening(view);\n    var viewIndex = getIndex(this, view); // viewIndex is undefined when the view is not found (may have been removed)\n    // check if it is undefined to prevent unexpected thing to happen\n    // array.splice(undefined, x) removes the first x element(s) from the array\n    // this protects us against issues when calling `remove` on a child view multiple times\n\n    if (oktaUnderscore.isNumber(viewIndex)) {\n      this[CHILDREN].splice(viewIndex, 1);\n    }\n  },\n\n  /**\n     * Should we auto render the view upon model change. Boolean or array of field names to listen to.\n     * @type {Boolean|Array}\n     * @deprecated Instead, please use modelEvents\n     * @example\n     * modelEvents: {\n     *   change:name: 'render'\n     * }\n     */\n  autoRender: false,\n\n  /**\n     *\n     * When the template is an underscore template, the render method will pass the options has to the template\n     * And the associated model, if exists, when it will prefer the model over the options in case of a conflict.\n     * {@link #render View.render}\n     * @type {(String|Function)}\n     * @example\n     * var View = View.extend({\n     *   template: '<p class=\"name\">{{name}}</p>'\n     * };\n     */\n  template: null,\n\n  /**\n     * A list of child view definitions to be passed to {@link #add this.add()}.\n     * Note: these definitions will be added **before** the {@link #constructor initiliaze} method invokes.\n     * @type {(Array|Function)}\n     * @example\n     * var Container = View.extend({\n     *    template: '<p class=\"content\"></p>',\n     *    children: [\n     *      [ContentView, '.content'],\n     *      [OtherContentView, '.content'],\n     *      OtherView\n     *    ]\n     *  })\n     *\n     * var Container = View.extend({\n     *    template: '<dov class=\"form-wrap\"></div>',\n     *    children: function () {\n     *      return [\n     *        [FormView, '.form-wrap', {options: {model: this.optiosn.otherModel}}]\n     *      ]\n     *    }\n     *  })\n     */\n  children: [],\n\n  /**\n     * Add a child view to the container.\n     * If the container is already rendered, will also render the view  and append it to the DOM.\n     * Otherwise will render and append once the container is rendered.\n     *\n     * *We believe that for the sake of encapsulation, a view should control its own chilren, so we treat this method as\n     * protected and even though technically you can call `view.add` externally we strongly discourage it.*\n     *\n     * @param {(src/framework/View|String)} view A class (or an instance which is discouraged) of a View - or an HTML\n     * string/template\n     * @param {String} [selector] selector in the view's template on which the view will be added to\n     * @param {Object} [options]\n     * @param {Boolean} [options.bubble=false] Bubble (proxy) events from this view up the chain\n     * @param {Boolean} [options.prepend=false] Prepend the view instend of appending\n     * @param {String} [options.selector] Selector in the view's template on which the view will be added to\n     * @param {Object} [options.options] Extra options to pass to the child constructor\n     * @protected\n     * @returns {src/framework/View} - The instance of itself for the sake of chaining\n     * @example\n     * var Container = View.extend({\n     *\n     *   template: [\n     *     '<h1></h1>',\n     *     '<section></section>',\n     *   ].join(''),\n     *\n     *   initalize: function () {\n     *\n     *     this.add(TitleView, 'h1'); // will be added to <h1>\n     *\n     *     this.add(ContentView1, 'section'); // will be added to <section>\n     *\n     *     this.add(ContentView2, 'section', {prepend: true}); // will be add into <section> **before** ContentView1\n     *\n     *     this.add(OtherView, {\n     *       options: {\n     *         model: new Model()\n     *       }\n     *     }); // will be added **after** the <section> element\n     *\n     *     this.add('<p class=\"name\">some html</p>'); //=> \"<p class=\"name\">some html</p>\"\n     *     this.add('<p class=\"name\">{{name}}</p>'); //=> \"<p class=\"name\">John Doe</p>\"\n     *     this.add('{{name}}') //=> \"<div>John Doe</div>\"\n     *     this.add('<span>{{name}}</span> w00t') //=> \"<div><span>John Doe</span> w00t</div>\"\n     *   }\n     *\n     * });\n     *\n     * var container - new View({name: 'John Doe'});\n     */\n  add: function (view, selector, bubble, prepend, extraOptions) {\n    /* eslint max-statements: [2, 30], complexity: [2, 12] */\n    var options = {};\n\n    var args = oktaUnderscore.toArray(arguments); // This will throw if a compiled template function is passed accidentally\n\n\n    if (oktaUnderscore.isFunction(view) && (!view.prototype || !view.prototype.render)) {\n      throw new Error('Type passed to add() is not a View');\n    }\n\n    if (oktaUnderscore.isObject(selector)) {\n      options = selector;\n      selector = options.selector;\n      bubble = options.bubble;\n      prepend = options.prepend;\n      extraOptions = options.options;\n    } else if (oktaUnderscore.isObject(bubble)) {\n      options = bubble;\n      bubble = options.bubble;\n      prepend = options.prepend;\n      extraOptions = options.options;\n    } // TODO: This will be deprecated at some point. Views should use precompiled templates\n\n\n    if (oktaUnderscore.isString(view)) {\n      view = function (template) {\n        return View.extend({\n          constructor: function () {\n            try {\n              var $el = Backbone.$(template);\n\n              if ($el.length !== 1) {\n                throw new Error('invalid Element');\n              }\n\n              var unescapingRexExp = /&(\\w+|#x\\d+);/g;\n              var elementUnescapedOuterHTMLLength = $el.prop('outerHTML').replace(unescapingRexExp, ' ').length;\n              var templateUnescapedLength = template.replace(unescapingRexExp, ' ').length;\n\n              if (elementUnescapedOuterHTMLLength !== templateUnescapedLength) {\n                throw new Error('invalid Element');\n              }\n\n              this.template = $el.html(); // Template string will be compiled by handlebars\n\n              this.el = $el.empty()[0];\n            } catch (e) {\n              // not a valid html tag.\n              this.template = template;\n            }\n\n            View.apply(this, arguments);\n          }\n        });\n      }(view);\n    }\n\n    if (view.prototype && view.prototype instanceof View) {\n      /* eslint new-cap: 0 */\n      var viewOptions = oktaUnderscore.omit(oktaUnderscore.extend({}, this.options, extraOptions), 'el');\n\n      args[0] = new view(viewOptions);\n      return this.add.apply(this, args);\n    } // prevent dups\n\n\n    if (oktaUnderscore.isNumber(getIndex(this, view))) {\n      throw new Error('Duplicate child');\n    }\n\n    view[PARENT] = this; // make the view responsible for adding itself to the parent:\n    // * register the selector in the closure\n    // * register a reference the parent in the closure\n\n    view[ADD_TO_CONTAINER] = function (selector) {\n      return function () {\n        if (selector && view[PARENT].$(selector).length !== 1) {\n          throw new Error('Invalid selector: ' + selector);\n        }\n\n        var $el = selector ? this[PARENT].$(selector) : this[PARENT].$el;\n        this.render(); // we need to delegate events in case\n        // the view was added and removed before\n\n        this.delegateEvents(); // this[PARENT].at(index).$el.before(this.el);\n\n        prepend ? $el.prepend(this.el) : $el.append(this.el);\n      };\n    }.call(view, selector); // if flag to bubble events is set\n    // proxy all child view events\n\n\n    if (bubble) {\n      this.listenTo(view, 'all', function () {\n        this.trigger.apply(this, arguments);\n      });\n    } // add to the dom if `render` has been called\n\n\n    if (this.rendered()) {\n      view[ADD_TO_CONTAINER]();\n    } // add view to child views collection\n\n\n    this[CHILDREN].push(view);\n    return this;\n  },\n\n  /**\n     * Remove all children from container\n     */\n  removeChildren: function () {\n    this.each(function (view) {\n      view.remove();\n    });\n    return this;\n  },\n\n  /**\n     *  Removes a view from the DOM, and calls stopListening to remove any bound events that the view has listenTo'd.\n     *  Also removes all childern of the view if any, and removes itself from its parent view(s)\n     */\n  remove: function () {\n    this.removeChildren();\n\n    if (this[PARENT]) {\n      this[PARENT].unregister(this);\n    }\n\n    return Backbone.View.prototype.remove.apply(this, arguments);\n  },\n\n  /**\n     * Compile the template to function you can apply tokens on on render time.\n     * Uses the underscore tempalting engine by default\n     * @protected\n     * @param  {String} template\n     * @return {Function} a compiled template\n     */\n  // TODO: This will be deprecated at some point. Views should use precompiled templates\n  compileTemplate: function (template) {\n    /* eslint  @okta/okta-ui/no-specific-methods: 0*/\n    return oktaUnderscore.template(template, undefined);\n  },\n\n  /**\n     * Render a template with `this.model` and `this.options` as parameters\n     * preferring the model over the options.\n     *\n     * @param  {(String|Function)} template The template to build\n     * @return {String} An HTML string\n     * @protected\n     */\n  renderTemplate: function (template) {\n    if (oktaUnderscore.isString(template)) {\n      // TODO: This will be deprecated at some point. Views should use precompiled templates\n      template = this.compileTemplate(template);\n    }\n\n    if (oktaUnderscore.isFunction(template)) {\n      return template(this.getTemplateData());\n    }\n  },\n\n  /**\n     * The data hash passed to the compiled template\n     * @return {Object}\n     * @protected\n     */\n  getTemplateData: function () {\n    var modelData = this.model && this.model.toJSON({\n      verbose: true\n    }) || {};\n\n    var options = oktaUnderscore.omit(this.options, ['state', 'settings', 'model', 'collection']);\n\n    return oktaUnderscore.defaults({}, modelData, options);\n  },\n\n  /**\n     * Renders the template to `$el` and append all children in order\n     * {@link #template View.template}\n     */\n  render: function () {\n    this.preRender();\n    doRender(this);\n    this.postRender();\n    return this;\n  },\n\n  /**\n     * Pre render routine. Will be called right *before* the logic in {@link #render} is executed\n     * @method\n     */\n  preRender: noop,\n\n  /**\n     * Post render routine. Will be called right *after* the logic in {@link #render} is executed\n     * @method\n     */\n  postRender: noop,\n\n  /**\n     * Was this instance rendered\n     */\n  rendered: function () {\n    return this[RENDERED];\n  },\n\n  /**\n     * Get all direct child views.\n     * @returns {src/framework/View[]}\n     * @example\n     * var container = View.extend({\n     *   children: [View1, View2]\n     * }).render();\n     * container.getChildren() //=> [view1, view2];\n     */\n  getChildren: function () {\n    return this.toArray();\n  },\n\n  /**\n     * Get a child by index\n     * @param {number} index\n     * @returns {src/framework/View} The child view\n     */\n  at: function (index) {\n    return this.getChildren()[index];\n  },\n\n  /**\n     * Invokes a method on all children down the tree\n     *\n     * @param {String} method The method to invoke\n     */\n  invoke: function (methodName) {\n    var args = oktaUnderscore.toArray(arguments);\n\n    this.each(function (child) {\n      // if child has children, bubble down the tree\n      if (child.size()) {\n        child.invoke.apply(child, args);\n      } // run the function on the child\n\n\n      if (oktaUnderscore.isFunction(child[methodName])) {\n        child[methodName].apply(child, args.slice(1));\n      }\n    });\n    return this;\n  }\n};\nView = Backbone.View.extend(\n/** @lends src/framework/View.prototype */\nproto); // Code borrowed from Backbone.js source\n// Underscore methods that we want to implement on the Container.\n\nvar methods = ['each', 'map', 'reduce', 'reduceRight', 'find', 'filter', 'reject', 'every', 'some', 'contains', 'toArray', 'size', 'first', 'initial', 'rest', 'last', 'without', 'indexOf', 'shuffle', 'lastIndexOf', 'isEmpty', 'chain', 'where', 'findWhere'];\n\noktaUnderscore.each(methods, function (method) {\n  View.prototype[method] = function () {\n    var args = oktaUnderscore.toArray(arguments);\n\n    args.unshift(oktaUnderscore.toArray(this[CHILDREN]));\n    return oktaUnderscore[method].apply(oktaUnderscore, args);\n  };\n});\n/**\n   * See [_.each](http://underscorejs.org/#each)\n   * @name each\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} iterator\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.map](http://underscorejs.org/#map)\n   * @name map\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} iterator\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.reduce](http://underscorejs.org/#reduce)\n   * @name reduce\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} iterator\n   * @param {Mixed} memo\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.reduceRight](http://underscorejs.org/#reduceRight)\n   * @name reduceRight\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} iterator\n   * @param {Mixed} memo\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.find](http://underscorejs.org/#find)\n   * @name find\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} predicate\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.filter](http://underscorejs.org/#filter)\n   * @name filter\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} predicate\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.reject](http://underscorejs.org/#reject)\n   * @name reject\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} predicate\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.every](http://underscorejs.org/#every)\n   * @name every\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} [predicate]\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.some](http://underscorejs.org/#some)\n   * @name some\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Function} [predicate]\n   * @param {Object} [context]\n   */\n\n/**\n   * See [_.contains](http://underscorejs.org/#contains)\n   * @name contains\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Mixed} value\n   */\n\n/**\n   * See [_.toArray](http://underscorejs.org/#toArray)\n   * @name toArray\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   */\n\n/**\n   * See [_.size](http://underscorejs.org/#size)\n   * @name size\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   */\n\n/**\n   * See [_.first](http://underscorejs.org/#first)\n   * @name first\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Number} [n]\n   */\n\n/**\n   * See [_.initial](http://underscorejs.org/#initial)\n   * @name initial\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Number} [n]\n   */\n\n/**\n   * See [_.last](http://underscorejs.org/#last)\n   * @name last\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Number} [n]\n   */\n\n/**\n   * See [_.rest](http://underscorejs.org/#rest)\n   * @name rest\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Number} [index]\n   */\n\n/**\n   * See [_.without](http://underscorejs.org/#without)\n   * @name without\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   */\n\n/**\n   * See [_.indexOf](http://underscorejs.org/#indexOf)\n   * @name indexOf\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Mixed} value\n   * @param {Boolean} [isSorted]\n   */\n\n/**\n   * See [_.shuffle](http://underscorejs.org/#shuffle)\n   * @name shuffle\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   */\n\n/**\n   * See [_.shuffle](http://underscorejs.org/#lastIndexOf)\n   * @name lastIndexOf\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Mixed} value\n   * @param {Number} [fromIndex]\n   */\n\n/**\n   * See [_.isEmpty](http://underscorejs.org/#isEmpty)\n   * @name isEmpty\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   */\n\n/**\n   * See [_.chain](http://underscorejs.org/#chain)\n   * @name chain\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   */\n\n/**\n   * See [_.where](http://underscorejs.org/#where)\n   * @name where\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Object} properties\n   */\n\n/**\n   * See [_.findWhere](http://underscorejs.org/#findWhere)\n   * @name findWhere\n   * @memberof src/framework/View\n   * @method\n   * @instance\n   * @param {Object} properties\n   */\n\n/**\n * It's used for distinguishing the ambiguity from _.isFunction()\n * which returns True for both a JavaScript Class constructor function\n * and normal function. With this flag, we can tell a function is actually\n * a View Class.\n * This flag is added in order to support the type of a parameter can be\n * either a Class or pure function that returns a Class.\n */\n\n\nView.isCourageView = true;\nvar FrameworkView = View;\n\nexport { FrameworkView as default };\n","import _Handlebars2 from '../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from './underscore-wrapper.js';\n\n/* eslint @okta/okta-ui/no-specific-methods: 0 */\n/**\n * @class module:Okta.internal.util.TemplateUtil\n * @hideconstructor\n */\n\nvar TemplateUtil = /** @lends module:Okta.internal.util.TemplateUtil */\n{\n  /**\n   * Compiles a Handlebars template\n   * @static\n   * @method\n   */\n  // TODO: This will be deprecated at some point. Views should use pre-compiled templates\n  tpl: oktaUnderscore.memoize(function (tpl) {\n    /* eslint @okta/okta-ui/no-specific-methods: 0 */\n    return function (context) {\n      return _Handlebars2.compile(tpl)(context);\n    };\n  })\n};\n\nexport { TemplateUtil as default };\n","import Backbone from '../vendor/lib/backbone.js';\nimport oktaUnderscore from '../util/underscore-wrapper.js';\nimport FrameworkView from '../framework/View.js';\nimport TemplateUtil from '../util/TemplateUtil.js';\n\nconst eventBus = oktaUnderscore.clone(Backbone.Events); // add `broadcast` and `listen` functionality to all views\n// We use one event emitter per all views\n// This means we need to be very careful with event names\n\n\nconst proto = {\n  constructor: function (options, ...rest) {\n    FrameworkView.call(this, options, ...rest);\n    this.module && this.$el.attr('data-view', this.module.id);\n  },\n\n  /**\n   * @deprecated Use {@link #removeChildren}\n   */\n  empty: function () {\n    return this.removeChildren();\n  },\n  compileTemplate: TemplateUtil.tpl,\n\n  /**\n   *\n   * Broadcasts a global event that all views and controllers can subscribe to\n   * for framework use only - prefer using a shared model\n   *\n   * @param {String} eventName A unique identifier for the event\n   * @param {...String} param Parameter to pass with the event (can pass more than one parameter)\n   * @deprecated For internal use only\n   * @private\n   */\n  broadcast: function () {\n    eventBus.trigger.apply(eventBus, arguments);\n    return this;\n  },\n\n  /**\n   * Subscribe to broadcast events\n   * for framework use only - prefer using a shared model\n   *\n   * @param {String} eventName The event identifier to subscribe\n   * @param {Function} fn The callback function to invoke\n   * @deprecated For internal use only\n   * @private\n   */\n  listen: function (name, fn) {\n    eventBus.off(name, fn);\n    this.listenTo(eventBus, name, fn);\n    return this;\n  },\n\n  /**\n   * Shows a notification box\n   * @param {String} level success / warning / error\n   * @param {String} message The message to display\n   * @param {Object} [options]\n   * @param {Number} [options.width] Set a custom width\n   * @param {String} [options.title] Set a custom title\n   * @param {Boolean} [options.hide=true] Do we want to auto-hide this notification?\n   * @param {Boolean} [options.dismissable] Show a dismiss button\n   * @example\n   * view.notify('success', 'Group created successfully');\n   */\n  notify: function (level, message, options) {\n    this.broadcast('notification', oktaUnderscore.defaults({\n      message: message,\n      level: level\n    }, options));\n    return this;\n  },\n\n  /**\n   * Shows a confirmation dialog\n   *\n   * Uses https://www.ericmmartin.com/projects/simplemodal/.\n   * If you want to configure the simplemodal options use ConfirmationDialog instead.\n   *\n   * The main difference between this and the native javascript `confirm` method\n   * Is this method is non blocking (note the callback pattern).\n   *\n   * The callback function will run in the context (`this`) of the invoking view.\n   *\n   * @param {String} [title] The title of the confirmation dialog\n   * @param {String} [message] The message of the confirmation dialog\n   * @param {Function} [okfn] The callback to run when the user hits \"OK\" (runs in the context of the invoking view)\n   * @param {Function} [cancelfn] The callback to run when the user hits \"Cancel\"\n   *        (runs in the context of the invoking view)\n   * @example\n   * view.confirm('Delete Group', 'Are you sure you want to delete the selected group?', function () {\n   *   model.destroy();\n   * });\n   *\n   * // title will be auto-set to \"Okta\"\n   * view.confirm('Are you sure you want to delete the selected group?', function () {\n   *   model.destroy();\n   * });\n   *\n   * view.confirm({\n   *   title: 'Delete Group', //=> Modal title\n   *   subtitle: 'Are you sure you want to delete the selected group?', //=> Modal subtitle\n   *   content: '<h3 color=\"red\">THIS WILL DELETE THE GROUP!</h3>', //=> A template or a view to add to the modal\n   *   save: 'Delete Group', //=> Button label\n   *   ok: _.bind(model.save, model) // Callback function on hitting \"ok\" button\n   *   cancel: 'Cancel', //=> Button label\n   *   cancelFn: _.bind(model.destroy, model) // Callback function on hitting \"cancel\" button\n   * });\n   */\n  confirm: function (title, message, okfn, cancelfn) {\n    let options;\n    /* eslint max-statements: [2, 12] */\n\n    if (typeof title === 'object') {\n      options = title;\n    } else {\n      // eslint-disable-next-line no-lonely-if\n      if (arguments.length === 2 && oktaUnderscore.isFunction(message)) {\n        options = {\n          title: 'Okta',\n          // eslint-disable-line @okta/okta/no-unlocalized-text\n          subtitle: title,\n          ok: message\n        };\n      } else {\n        options = {\n          title: title,\n          subtitle: message,\n          ok: okfn,\n          cancelFn: cancelfn\n        };\n      }\n    }\n\n    if (oktaUnderscore.isFunction(options.ok)) {\n      options.ok = oktaUnderscore.bind(options.ok, this);\n    }\n\n    if (oktaUnderscore.isFunction(options.cancelFn)) {\n      options.cancelFn = oktaUnderscore.bind(options.cancelFn, this);\n    }\n\n    this.broadcast('confirmation', options);\n    return this;\n  },\n\n  /**\n   * Shows an alert box\n   *\n   * The main difference between this and the native javascript `alert` method\n   * Is this method is non blocking.\n   *\n   * @param {String} message The message\n   * @example\n   * view.alert('Mission complete');\n   */\n  alert: function (params) {\n    if (oktaUnderscore.isString(params)) {\n      params = {\n        subtitle: params\n      };\n    }\n\n    this.confirm(oktaUnderscore.extend({}, params, {\n      noCancelButton: true\n    }));\n    return this;\n  }\n};\n/**\n * See {@link src/framework/View} for more detail and examples from the base class.\n * @class module:Okta.View\n * @extends src/framework/View\n */\n\n/** @lends module:Okta.View.prototype */\n\nvar BaseView = FrameworkView.extend(proto,\n/** @lends View.prototype */\n{\n  /** @method */\n  decorate: function (TargetView) {\n    const BaseViewView = TargetView.extend({});\n\n    oktaUnderscore.defaults(BaseViewView.prototype, proto);\n\n    return BaseViewView;\n  }\n});\n\nexport { BaseView as default };\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../util/underscore-wrapper.js';\nimport BaseView from '../BaseView.js';\nimport StringUtil from '../../util/StringUtil.js';\n\nconst defaults = {\n  level: 'success',\n  hide: true,\n  fade: 400,\n  delay: 3000,\n  width: 0,\n  dismissable: false\n};\nvar Notification = BaseView.extend({\n  className: 'infobox infobox-confirm infobox-confirm-fixed',\n  events: {\n    'click .infobox-dismiss-link': function (e) {\n      e.preventDefault();\n      this.fadeOut();\n    }\n  },\n  template: _Handlebars2.template({\n    \"1\": function (container, depth0, helpers, partials, data) {\n      var lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<a class=\\\"infobox-dismiss-link\\\" title=\\\"\" + container.escapeExpression((lookupProperty(helpers, \"i18n\") || depth0 && lookupProperty(depth0, \"i18n\") || container.hooks.helperMissing).call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"i18n\",\n        \"hash\": {\n          \"bundle\": \"courage\",\n          \"code\": \"component.dismiss\"\n        },\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 58\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 108\n          }\n        }\n      })) + \"\\\" href=\\\"#\\\"><span class=\\\"dismiss-icon\\\"></span></a>\";\n    },\n    \"3\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<h3>\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"title\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 220\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 229\n          }\n        }\n      }) : helper)) + \"</h3>\";\n    },\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          helper,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          alias2 = container.hooks.helperMissing,\n          alias3 = \"function\",\n          alias4 = container.escapeExpression,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"dismissable\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(1, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 164\n          }\n        }\n      })) != null ? stack1 : \"\") + \"<span class=\\\"icon \" + alias4((helper = (helper = lookupProperty(helpers, \"level\") || (depth0 != null ? lookupProperty(depth0, \"level\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"level\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 182\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 191\n          }\n        }\n      }) : helper)) + \"-16\\\"></span>\" + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"title\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(3, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 203\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 241\n          }\n        }\n      })) != null ? stack1 : \"\") + \"<p>\" + alias4((helper = (helper = lookupProperty(helpers, \"message\") || (depth0 != null ? lookupProperty(depth0, \"message\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"message\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 244\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 255\n          }\n        }\n      }) : helper)) + \"</p>\";\n    },\n    \"useData\": true\n  }),\n  initialize: function () {\n    this.options = oktaUnderscore.defaults({}, this.options, defaults);\n\n    if (!this.options.message) {\n      switch (this.options.level) {\n        case 'success':\n          this.options.message = StringUtil.localize('notification.default.message.success', 'courage');\n          break;\n\n        case 'error':\n          this.options.message = StringUtil.localize('notification.default.message.error', 'courage');\n          break;\n\n        case 'warning':\n          this.options.message = StringUtil.localize('notification.default.message.warning', 'courage');\n          break;\n      }\n    }\n\n    this.$el.addClass('infobox-' + this.options.level);\n\n    if (this.options.width) {\n      this.$el.width(this.options.width);\n    }\n  },\n  getTemplateData: function () {\n    return oktaUnderscore.extend(oktaUnderscore.pick(this.options, 'level', 'message', 'title'), {\n      dismissable: this.options.hide === false || this.options.dismissable === true\n    });\n  },\n  postRender: function () {\n    if (this.options.hide) {\n      oktaUnderscore.delay(oktaUnderscore.bind(this.fadeOut, this), this.options.delay);\n    }\n  },\n  fadeOut: function () {\n    this.$el.fadeOut(this.options.fade, oktaUnderscore.bind(this.remove, this));\n  }\n});\n\nexport { Notification as default };\n","import Backbone from '../vendor/lib/backbone.js';\nimport ConfirmationDialog from '../../empty.js';\nimport oktaJQueryStatic from './jquery-wrapper.js';\nimport oktaUnderscore from './underscore-wrapper.js';\nimport Logger from './Logger.js';\nimport SettingsModel from './SettingsModel.js';\nimport Notification from '../views/components/Notification.js';\n\nfunction getRoute(router, route) {\n  const root = oktaUnderscore.result(router, 'root') || '';\n\n  if (root && oktaUnderscore.isString(route)) {\n    return [root, route].join('/').replace(/\\/{2,}/g, '/');\n  }\n\n  return route;\n}\n/**\n * BaseRouter is a standard [Backbone.Router](http://backbonejs.org/#Router)\n * with a few additions:\n * - Explicit mapping between routes and controllers\n * - Support for rendering notification and confirmation dialogs\n *\n * Checkout the [Hello World Tutorial](https://github.com/okta/courage/wiki/Hello-World)\n * for a step-by-step guide to using this.\n *\n * @class module:Okta.Router\n * @extends external:Backbone.Router\n * @param {Object} options options hash\n * @param {String} options.el a jQuery selector string stating where to attach the controller in the DOM\n */\n\n\nconst props =\n/** @lends module:Okta.Router.prototype */\n{\n  /**\n   * The root URL for the router. When setting {@link http://backbonejs.org/#Router-routes|routes},\n   * it will be prepended to each route.\n   * @type {String|Function}\n   */\n  root: '',\n  listen: Notification.prototype.listen,\n  constructor: function (options = {}) {\n    this.el = options.el;\n    /**\n     * Make sure `this.settings` has been set before invoke super - `Backbone.Router.apply`,\n     * which will invoke `this.initialize`, which could use `this.settings`.\n     *\n     * In theory we can set `this.settings` in `this.initialize` and assume `child.initialize`\n     * will invoke `super.initialize` first. But in reality, `child.initialize` doesn't call\n     * `super.initialize` at all.\n     */\n\n    this.settings = new SettingsModel(oktaUnderscore.omit(options, 'el'));\n\n    if (options.root) {\n      this.root = options.root;\n    }\n\n    Backbone.Router.apply(this, arguments);\n    this.listen('notification', this._notify);\n    this.listen('confirmation', this._confirm);\n  },\n\n  /**\n   * Fires up a confirmation dialog\n   *\n   * @param  {Object} options Options Hash\n   * @param  {String} options.title The title\n   * @param  {Array<string>} buttonOrder The order of the buttons\n   * @param  {String} options.subtitle The explain text\n   * @param  {String} options.save The text for the save button\n   * @param  {Function} options.ok The callback function to run when hitting \"OK\"\n   * @param  {String} options.cancel The text for the cancel button\n   * @param  {Function} options.cancelFn The callback function to run when hitting \"Cancel\"\n   * @param  {Boolean} options.noCancelButton Don't render the cancel button (useful for alert dialogs)\n   * @param  {Boolean} options.noSubmitButton Don't render the primary button (useful for alert dialogs)\n   * @private\n   *\n   * @return {Okta.View} the dialog view\n   */\n  _confirm: function (options = {}) {\n    const Dialog = ConfirmationDialog.extend(oktaUnderscore.pick(options, 'title', 'subtitle', 'save', 'ok', 'cancel', 'cancelFn', 'noCancelButton', 'noSubmitButton', 'content', 'danger', 'type', 'closeOnOverlayClick', 'buttonOrder'));\n    const dialog = new Dialog({\n      model: this.settings\n    }); // The model is here because itsa part of the BaseForm paradigm.\n    // It will be ignored in the context of a confirmation dialog.\n\n    dialog.render();\n    return dialog; // test hook\n  },\n\n  /**\n   * Fires up a notification banner\n   *\n   * @param  {Object} options Options Hash\n   * @return {Okta.View} the notification view\n   * @private\n   */\n  _notify: function (options) {\n    const notification = new Notification(options);\n    oktaJQueryStatic('#content').prepend(notification.render().el);\n    return notification; // test hook\n  },\n\n  /**\n   * Renders a Controller\n   * This will initialize new instance of a controller and call render on it\n   *\n   * @param  {Okta.Controller} Controller The controller Class we which to render\n   * @param  {Object} [options] Extra options to the controller constructor\n   */\n  render: function (Controller, options) {\n    this.unload();\n    options = oktaUnderscore.extend(oktaUnderscore.pick(this, 'settings', 'el'), options || {});\n    this.controller = new Controller(options);\n    this.controller.render();\n  },\n\n  /**\n   * Starts the backbone history object\n   *\n   * Waits for the dom to be ready before calling `Backbone.history.start()` (IE issue).\n   *\n   * See [Backbone History](http://backbonejs.org/#History) for more information.\n   */\n  start: function (...args) {\n    oktaJQueryStatic(function () {\n      if (Backbone.History.started) {\n        Logger.error('History has already been started');\n        return;\n      }\n\n      Backbone.history.start(...args);\n    });\n  },\n\n  /**\n   * Removes active controller and frees up event listeners\n   */\n  unload: function () {\n    if (this.controller) {\n      this.stopListening(this.controller);\n      this.stopListening(this.controller.state);\n      this.controller.remove();\n    }\n  },\n  route: function (route, name, callback) {\n    return Backbone.Router.prototype.route.call(this, getRoute(this, route), name, callback);\n  },\n  navigate: function (fragment, options) {\n    return Backbone.Router.prototype.navigate.call(this, getRoute(this, fragment), options);\n  }\n};\nvar BaseRouter = Backbone.Router.extend(props);\n\nexport { BaseRouter as default };\n","import oktaUnderscore from './underscore-wrapper.js';\nimport Model from '../models/Model.js';\n\n/**\n * @class StateMachine\n * @extends Okta.Model\n * @private\n *\n * A state object that holds the applciation state\n */\nvar StateMachine = Model.extend({\n  /**\n   * Invokes a method on the applicable {@link Okta.Controller}\n   *\n   * ```javascript\n   * state.invoke('methodName', 'param1', 'param2')\n   * // Will call\n   * contoller.methodName('param1', 'param2')\n   * ```\n   * @param {String} methodName the name of the controller method to invoke on the controller\n   */\n  invoke: function () {\n    const args = oktaUnderscore.toArray(arguments);\n\n    args.unshift('__invoke__');\n    this.trigger.apply(this, args);\n  }\n});\n\nexport { StateMachine as default };\n","import oktaJQueryStatic from './jquery-wrapper.js';\nimport oktaUnderscore from './underscore-wrapper.js';\nimport BaseRouter from './BaseRouter.js';\nimport SettingsModel from './SettingsModel.js';\nimport StateMachine from './StateMachine.js';\nimport BaseView from '../views/BaseView.js';\n\nfunction clean(obj) {\n  const res = {};\n\n  oktaUnderscore.each(obj, function (value, key) {\n    if (!oktaUnderscore.isNull(value)) {\n      res[key] = value;\n    }\n  });\n\n  return res;\n}\n\nconst proto =\n/** @lends module:Okta.Controller.prototype */\n{\n  preinitialize: function (options = {}) {\n    // If 'state' is passed down as options, use it, else create a 'new StateMachine()'\n    this.state = oktaUnderscore.result(this, 'state');\n    const hasStateBeenInitialized = this.state instanceof StateMachine || options.state instanceof StateMachine;\n\n    if (!hasStateBeenInitialized) {\n      const stateData = oktaUnderscore.defaults(clean(options.state), this.state || {}); // TODO:\n      // `framework/View.js set `this.state = options.state.`.\n      // Therefore we could consider to do\n      // 1. `options.state = new StateMachine()`\n      // 2. remove `delete options.state`\n\n\n      this.state = new StateMachine(stateData);\n      delete options.state;\n    }\n\n    if (!options.settings) {\n      // allow the controller to live without a router\n      options.settings = new SettingsModel(oktaUnderscore.omit(options || {}, 'el'));\n      this.listen('notification', BaseRouter.prototype._notify);\n      this.listen('confirmation', BaseRouter.prototype._confirm);\n    }\n\n    BaseView.prototype.preinitialize.call(this, options);\n  },\n  constructor: function (options = {}) {\n    BaseView.call(this, options);\n    this.listenTo(this.state, '__invoke__', function () {\n      const args = oktaUnderscore.toArray(arguments);\n\n      const method = args.shift();\n\n      if (oktaUnderscore.isFunction(this[method])) {\n        this[method].apply(this, args);\n      }\n    });\n    let MainView; // if `this.View` is already a Backbone View\n\n    if (this.View && this.View.isCourageView) {\n      MainView = this.View;\n    } // if `this.View` is a pure function that returns a Backbone View\n    else if (oktaUnderscore.result(this, 'View') && oktaUnderscore.result(this, 'View').isCourageView) {\n      MainView = oktaUnderscore.result(this, 'View');\n    }\n\n    if (MainView) {\n      this.add(new MainView(this.toJSON()));\n    }\n  },\n\n  /**\n   * The default values of our application state\n   * @type {Object}\n   * @default {}\n   */\n  state: {},\n\n  /**\n   * The main view this controller operate on\n   * @type {module:Okta.View}\n   * @default null\n   */\n  View: null,\n\n  /**\n   * Renders the {@link module:Okta.Controller#View|main view} after the DOM is ready\n   * in case the controller is the root component of the page (e.g there's no router)\n   */\n  render: function () {\n    const args = arguments;\n    const self = this;\n    oktaJQueryStatic(function () {\n      BaseView.prototype.render.apply(self, args);\n    });\n    return this;\n  },\n\n  /**\n   * Creates the view constructor options\n   * @param {Object} [options] Extra options\n   * @return {Object} The view constructor options\n   */\n  toJSON: function (options) {\n    return oktaUnderscore.extend(oktaUnderscore.pick(this, 'state', 'settings', 'collection', 'model'), options || {});\n  },\n\n  /**\n   * Removes the child views, empty the DOM element and stop listening to events\n   */\n  remove: function () {\n    this.removeChildren();\n    this.stopListening();\n    this.$el.empty();\n    return this;\n  }\n};\n/**\n * A Controller is our application control flow component.\n *\n * Typically it will:\n * - Initialize the models, controller and main views\n * - Listen to events\n * - Create, read, update and delete models\n * - Create modal dialogs, confirmation dialogs and alert dialogs\n * - Control the application flow\n *\n * The constructor is responsible for:\n * - Create the application state object\n * - Assign or creates the application settings object\n * - Create an instance of the main view with the relevant parameters\n *\n * See:\n * [Hello World Tutorial](https://github.com/okta/courage/wiki/Hello-World),\n * [Test Spec](https://github.com/okta/okta-ui/blob/master/packages/courage/test/spec/util/BaseController_spec.js)\n *\n * @class module:Okta.Controller\n * @param {Object} options Options Hash\n * @param {SettingsModel} [options.settings] Application Settings Model\n * @param {String} options.el a jQuery selector string stating where to attach the controller in the DOM\n */\n\nvar BaseController = BaseView.extend(proto);\n\nexport { BaseController as default };\n","import oktaUnderscore from './underscore-wrapper.js';\n\nfunction changeEventString(doWhen) {\n  return 'change:' + oktaUnderscore.keys(doWhen).join(' change:');\n}\n\nfunction calcDoWhen(value, key) {\n  const modelValue = this.model.get(key);\n\n  if (oktaUnderscore.isFunction(value)) {\n    return value.call(this, modelValue);\n  } else {\n    return value === modelValue;\n  }\n}\n\nfunction _doWhen(view, doWhen, fn) {\n  const toggle = oktaUnderscore.bind(fn, view, view, doWhen);\n\n  view.render = oktaUnderscore.wrap(view.render, function (render) {\n    const val = render.call(view);\n    toggle({\n      animate: false\n    });\n    return val;\n  });\n  view.listenTo(view.model, changeEventString(doWhen), function () {\n    toggle({\n      animate: true\n    });\n  });\n}\n\nvar ViewUtil = {\n  applyDoWhen: function (view, doWhen, fn) {\n    if (!(view.model && oktaUnderscore.isObject(doWhen) && oktaUnderscore.size(doWhen) && oktaUnderscore.isFunction(fn))) {\n      return;\n    }\n\n    _doWhen(view, doWhen, function (view, doWhen, options) {\n      const result = oktaUnderscore.every(oktaUnderscore.map(doWhen, calcDoWhen, view));\n\n      fn.call(view, result, options);\n    });\n  }\n};\n\nexport { ViewUtil as default };\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../util/underscore-wrapper.js';\nimport ViewUtil from '../../util/ViewUtil.js';\nimport BaseView from '../BaseView.js';\n\nconst disabledEvents = {\n  click: function (e) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n};\n/**\n * A configurable button\n * @class module:Okta.internal.views.components.BaseButtonLink\n * @extends module:Okta.View\n * @example\n * var View = BaseButtonLink.extend({\n *   title: 'Click Me',\n *   icon: 'help-text'\n * })\n */\n\nvar BaseButtonLink = BaseView.extend(\n/** @lends module:Okta.internal.views.components.BaseButtonLink.prototype */\n{\n  attributes: function () {\n    const defaultAttrs = {\n      'data-se': 'button'\n    };\n\n    const additionalAttr = this.__getAttribute('attrs');\n\n    return oktaUnderscore.extend(defaultAttrs, additionalAttr);\n  },\n\n  /**\n   * The main text for the button\n   * @name title\n   * @memberof module:Okta.internal.views.components.BaseButtonLink\n   * @type {(String|Function)}\n   * @instance\n   */\n\n  /**\n   * The link for the button\n   * @name href\n   * @memberof module:Okta.internal.views.components.BaseButtonLink\n   * @type {(String|Function)}\n   * @instance\n   */\n\n  /**\n   * CSS class for the icon to display. See [Style guide](http://rain.okta1.com:1802/su/dev/style-guide#icons)\n   * @name icon\n   * @memberof module:Okta.internal.views.components.BaseButtonLink\n   * @type {(String|Function)}\n   * @instance\n   */\n\n  /**\n   * A [Backbone events](http://backbonejs.org/#View-delegateEvents) hash\n   * @name events\n   * @memberof module:Okta.internal.views.components.BaseButtonLink\n   * @type {Object}\n   * @instance\n   */\n  tagName: 'a',\n  template: _Handlebars2.template({\n    \"1\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<span class=\\\"icon \" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"icon\") || (depth0 != null ? lookupProperty(depth0, \"icon\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"icon\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 30\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 38\n          }\n        }\n      }) : helper)) + \"\\\"></span>\";\n    },\n    \"3\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return container.escapeExpression((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"title\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 67\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 76\n          }\n        }\n      }) : helper));\n    },\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"icon\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(1, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 54\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"title\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(3, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 54\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 83\n          }\n        }\n      })) != null ? stack1 : \"\");\n    },\n    \"useData\": true\n  }),\n\n  /**\n   * Make this button visible, default to true.\n   * @type {(Boolean|Function)}\n   * @default true\n   */\n  visible: true,\n\n  /**\n   * Make this button enabled, default to true.\n   * @type {(Boolean|Function)}\n   * @default true\n   */\n  enabled: true,\n\n  /**\n   * The setting to determine when the button is enabled, default to {} and\n   * enabled takes a higher priority.\n   * @type {(Object|Function)}\n   * @default {}\n   */\n  enableWhen: {},\n\n  /**\n   * The setting to determine when the button is visible, default to {} and\n   * visible takes a higher priority.\n   * @type {(Object|Function)}\n   * @default {}\n   */\n  showWhen: {},\n  constructor: function (options) {\n    this.options = options || {};\n    const data = this.getTemplateData();\n    this.disabled = false;\n    BaseView.apply(this, arguments);\n    this.$el.addClass('link-button');\n\n    if (data.icon) {\n      this.$el.addClass('link-button-icon');\n\n      if (!data.title) {\n        this.$el.addClass('icon-only');\n      }\n    }\n  },\n  getTemplateData: function () {\n    return {\n      href: this.__getAttribute('href'),\n      title: this.__getAttribute('title'),\n      icon: this.__getAttribute('icon')\n    };\n  },\n  initialize: function () {\n    ViewUtil.applyDoWhen(this, oktaUnderscore.resultCtx(this, 'enableWhen', this), this.toggle);\n    ViewUtil.applyDoWhen(this, oktaUnderscore.resultCtx(this, 'showWhen', this), this.toggleVisible);\n  },\n  render: function () {\n    BaseView.prototype.render.apply(this, arguments);\n\n    if (!oktaUnderscore.result(this, 'enabled')) {\n      this.toggle(false);\n    }\n\n    if (!oktaUnderscore.result(this, 'visible')) {\n      this.toggleVisible(false);\n    }\n\n    const data = this.getTemplateData();\n    this.$el.attr('href', data.href || '#');\n    return this;\n  },\n  __getAttribute: function (name, defaultValue) {\n    let value = oktaUnderscore.resultCtx(this.options, name, this);\n\n    if (oktaUnderscore.isUndefined(value)) {\n      value = oktaUnderscore.result(this, name);\n    }\n\n    return !oktaUnderscore.isUndefined(value) ? value : defaultValue;\n  },\n  enable: function () {\n    this.toggle(true);\n  },\n  disable: function () {\n    this.toggle(false);\n  },\n  show: function () {\n    this.toggleVisible(true);\n  },\n  hide: function () {\n    this.toggleVisible(false);\n  },\n  toggle: function (enable) {\n    const bool = !!enable && oktaUnderscore.result(this, 'enabled'); //this is to toggle the enability\n\n\n    this.disabled = !bool;\n    this.$el.toggleClass('link-button-disabled btn-disabled disabled', this.disabled);\n    this.delegateEvents(this.disabled ? disabledEvents : null);\n  },\n  toggleVisible: function (visible) {\n    const hidden = !visible || !oktaUnderscore.result(this, 'visible');\n    this.$el.toggleClass('hide', hidden);\n  }\n});\n\nexport { BaseButtonLink as default };\n","import oktaUnderscore from './underscore-wrapper.js';\nimport BaseButtonLink from '../views/components/BaseButtonLink.js';\n\n/* eslint '@okta/okta-ui/no-deprecated-methods': [0, [{ name: 'BaseButtonLink.extend', use: 'Okta.createButton'}, ]] */\n/**\n * A factory method wrapper for {@link BaseButtonLink} creation\n * @class module:Okta.internal.util.ButtonFactory\n */\n\nfunction normalizeEvents(options) {\n  const events = oktaUnderscore.extend(options.click ? {\n    click: options.click\n  } : {}, options.events || {});\n\n  const target = {};\n\n  oktaUnderscore.each(events, function (fn, eventName) {\n    target[eventName] = function (e) {\n      if (!options.href) {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n\n      if (!(this.disabled && eventName === 'click')) {\n        fn.apply(this, arguments);\n      }\n    };\n  });\n\n  return target;\n}\n\nvar ButtonFactory = /** @lends module:Okta.internal.util.ButtonFactory */\n{\n  /**\n   * Creates a {@link module:Okta.internal.views.components.BaseButtonLink|BaseButtonLink}.\n   * @param  {Object} options Options hash\n   * @param  {String} [options.title] The button text\n   * @param  {String} [options.icon]\n   * CSS class for the icon to display. See [Style guide](http://rain.okta1.com:1802/su/dev/style-guide#icons)\n   * @param {String} [options.href] The button link\n   * @param {Function} [options.click] On click callback\n   * @param {Object} [options.events] a [Backbone events](http://backbonejs.org/#View-delegateEvents) hash\n   * @returns {module:Okta.internal.views.components.BaseButtonLink} BaseButtonLink prototype (\"class\")\n   */\n  create: function (options) {\n    options = oktaUnderscore.clone(options);\n    options.attrs = options.attributes;\n    delete options.attributes;\n    return BaseButtonLink.extend(oktaUnderscore.extend(options, {\n      events: normalizeEvents(options)\n    }));\n  }\n};\n\nexport { ButtonFactory as default };\n","import Backbone from '../vendor/lib/backbone.js';\nimport oktaUnderscore from './underscore-wrapper.js';\n\nfunction Class(options) {\n  this.options = oktaUnderscore.clone(options || {});\n  this.cid = oktaUnderscore.uniqueId('class');\n  this.initialize.apply(this, arguments);\n}\n\noktaUnderscore.extend(Class.prototype, Backbone.Events, {\n  initialize: function () {}\n});\n\nClass.extend = Backbone.Model.extend;\n\nexport { Class as default };\n","var js_cookie = {exports: {}};\n\nexport { js_cookie as j };\n","import { j as js_cookie } from '../../../../_virtual/js.cookie.js';\n\n/*!\n * JavaScript Cookie v2.1.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n\n(function (module, exports) {\n(function (factory) {\n  {\n    module.exports = factory();\n  }\n})(function () {\n  function extend() {\n    var i = 0;\n    var result = {};\n\n    for (; i < arguments.length; i++) {\n      var attributes = arguments[i];\n\n      for (var key in attributes) {\n        result[key] = attributes[key];\n      }\n    }\n\n    return result;\n  }\n\n  function init(converter) {\n    function api(key, value, attributes) {\n      var result; // Write\n\n      if (arguments.length > 1) {\n        attributes = extend({\n          path: '/'\n        }, api.defaults, attributes);\n\n        if (typeof attributes.expires === 'number') {\n          var expires = new Date();\n          expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n          attributes.expires = expires;\n        }\n\n        try {\n          result = JSON.stringify(value);\n\n          if (/^[\\{\\[]/.test(result)) {\n            value = result;\n          }\n        } catch (e) {}\n\n        if (!converter.write) {\n          value = encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n        } else {\n          value = converter.write(value, key);\n        }\n\n        key = encodeURIComponent(String(key));\n        key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n        key = key.replace(/[\\(\\)]/g, escape);\n        return document.cookie = [key, '=', value, attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE\n        attributes.path && '; path=' + attributes.path, attributes.domain && '; domain=' + attributes.domain, attributes.secure ? '; secure' : ''].join('');\n      } // Read\n\n\n      if (!key) {\n        result = {};\n      } // To prevent the for loop in the first place assign an empty array\n      // in case there are no cookies at all. Also prevents odd result when\n      // calling \"get()\"\n\n\n      var cookies = document.cookie ? document.cookie.split('; ') : [];\n      var rdecode = /(%[0-9A-Z]{2})+/g;\n      var i = 0;\n\n      for (; i < cookies.length; i++) {\n        var parts = cookies[i].split('=');\n        var name = parts[0].replace(rdecode, decodeURIComponent);\n        var cookie = parts.slice(1).join('=');\n\n        if (cookie.charAt(0) === '\"') {\n          cookie = cookie.slice(1, -1);\n        }\n\n        try {\n          cookie = converter.read ? converter.read(cookie, name) : converter(cookie, name) || cookie.replace(rdecode, decodeURIComponent);\n\n          if (this.json) {\n            try {\n              cookie = JSON.parse(cookie);\n            } catch (e) {}\n          }\n\n          if (key === name) {\n            result = cookie;\n            break;\n          }\n\n          if (!key) {\n            result[name] = cookie;\n          }\n        } catch (e) {}\n      }\n\n      return result;\n    }\n\n    api.get = api.set = api;\n\n    api.getJSON = function () {\n      return api.apply({\n        json: true\n      }, [].slice.call(arguments));\n    };\n\n    api.defaults = {};\n\n    api.remove = function (key, attributes) {\n      api(key, '', extend(attributes, {\n        expires: -1\n      }));\n    };\n\n    api.withConverter = init;\n    return api;\n  }\n\n  return init(function () {});\n});\n}(js_cookie));\n\nvar Cookie = js_cookie.exports;\n\nexport { Cookie as default };\n","import oktaUnderscore from './underscore-wrapper.js';\nimport Cookie$1 from '../vendor/lib/js.cookie.js';\n\nconst SECURED_COOKIE = /^https/.test(window.location.href);\nvar Cookie = {\n  setCookie: function (name, value, options) {\n    Cookie$1.set(name, value, oktaUnderscore.defaults(options || {}, {\n      secure: SECURED_COOKIE,\n      path: '/'\n    }));\n  },\n  getCookie: function () {\n    return Cookie$1.get.apply(Cookie$1, arguments);\n  },\n  removeCookie: function () {\n    return Cookie$1.remove.apply(Cookie$1, arguments);\n  }\n};\n\nexport { Cookie as default };\n","import clipboard from 'clipboard';\nimport oktaJQueryStatic from './jquery-wrapper.js';\nimport oktaUnderscore from './underscore-wrapper.js';\nimport FrameworkView from '../framework/View.js';\nimport Class from './Class.js';\n\nconst Clipboard = clipboard;\nconst OPTIONS = ['success', 'error', 'target', 'text'];\nconst ClipboardClipboardWrapper = Class.extend({\n  initialize: function (el, options) {\n    /* eslint complexity:0, max-statements: [2, 24] */\n    options = oktaUnderscore.pick(options || {}, OPTIONS);\n    let trigger;\n    let target;\n    let text;\n\n    if (oktaUnderscore.isString(el)) {\n      trigger = el;\n    }\n\n    if (oktaUnderscore.isElement(el)) {\n      trigger = el;\n    }\n\n    if (el instanceof oktaJQueryStatic) {\n      trigger = el.selector; // TODO: use stronger type\n    }\n\n    if (el instanceof FrameworkView) {\n      trigger = el.el;\n    }\n\n    if (oktaUnderscore.isFunction(options.target)) {\n      target = options.target;\n    }\n\n    if (oktaUnderscore.isElement(options.target)) {\n      target = oktaUnderscore.constant(options.target);\n    }\n\n    if (oktaUnderscore.isString(options.text)) {\n      text = oktaUnderscore.constant(options.text);\n    } else if (oktaUnderscore.isFunction(options.text)) {\n      text = options.text;\n    }\n\n    this.__instance = new Clipboard(trigger, {\n      target: target,\n      text: text\n    });\n    this.done = oktaUnderscore.partial(this.__setCallback, 'success');\n    this.error = oktaUnderscore.partial(this.__setCallback, 'error');\n    this.done(options.success);\n    this.error(options.error);\n  },\n  __setCallback: function (event, callback) {\n    if (!oktaUnderscore.isFunction(callback)) {\n      return;\n    }\n\n    this.__instance.on(event, callback);\n\n    return this.__instance;\n  }\n});\n/**\n * @class Clipboard\n * @abstract\n *\n * Abstract class that initializes a Clipboard\n *   https://clipboardjs.com/\n *\n * ### Example:\n *\n *  ```javascript\n *  //attach a selector\n *  Clipboard.attach('.copy-button');\n *\n *  //attach a node, and set a constant string\n *  Clipboard.attach(buttonView.el, {\n *    text: 'this is the content'\n *  });\n *\n *  //attach a view, set text dynamically, and set callback\n *  Clipboard.attach(buttonView, {\n *    text: function (triggerNode) {\n *      return $(triggerNode).attr('foo') + model.get('userName');\n *    }\n *  }).done(function (targetNode) {\n *    var msg = ['\"', targetNode.text, '\" is copied'].join('');\n *    view.notify('success', msg);\n *  });\n *\n *  //attach a jquery object, set the target node, and set callback\n *  Clipboard.attach($('.customizeTarget'), {\n *    target: function (triggerNode) {\n *      return triggerNode;\n *    },\n *    success: function (targetNode) {\n *      view.notify('success', 'copied!');\n *    }\n *  });\n *\n * ```\n */\n\nvar Clipboard$1 = {\n  /**\n   * @param {String|Node|View|jQuery} [el] el could be a selector (recommended),\n   *           a dom node, a view or a jquery object\n   * @param {Object} [options] Options hash\n   * @param  {Node|Function} [options.target] a static dom node\n   *           or a function that takes trigger node and returns a target node\n   * @param {String|Function} [options.text] a static string or a function that returns a string dynamically\n   * @param {Function} [options.success] success callback\n   * @param {Function} [options.error] error callback\n   * @return {Object} The clipboard object\n   */\n  attach: function (el, options) {\n    return new ClipboardClipboardWrapper(el, options);\n  }\n};\n\nexport { Clipboard$1 as default };\n","var Keys = {\n  UP: 38,\n  DOWN: 40,\n  DEL: 46,\n  TAB: 9,\n  RETURN: 13,\n  ENTER: 13,\n  ESC: 27,\n  COMMA: 188,\n  PAGEUP: 33,\n  PAGEDOWN: 34,\n  SPACE: 32,\n  BACKSPACE: 8,\n  __isKey: function (e, key) {\n    return (e.which || e.keyCode) === this[key];\n  },\n  isEnter: function (e) {\n    return this.__isKey(e, 'ENTER');\n  },\n  isEsc: function (e) {\n    return this.__isKey(e, 'ESC');\n  },\n  isSpaceBar: function (e) {\n    return this.__isKey(e, 'SPACE');\n  }\n};\n\nexport { Keys as default };\n","import oktaUnderscore from './underscore-wrapper.js';\nimport BaseView from '../views/BaseView.js';\n\nvar Util = {\n  redirect: function (url) {\n    window.location = url;\n  },\n  reloadPage: function () {\n    window.location.reload();\n  },\n  constantError: function (errorMessage) {\n    return function () {\n      throw new Error(errorMessage);\n    };\n  },\n\n  /**\n   * Simply convert an URL query key value pair object into an URL query string.\n   * Remember NOT to escape the query string when using this util.\n   * example:\n   * input: {userId: 123, instanceId: undefined, expand: 'schema,app'}\n   * output: '?userId=123&expand=schema,app'\n   */\n  getUrlQueryString: function (queries) {\n    oktaUnderscore.isObject(queries) || (queries = {});\n\n    const queriesString = oktaUnderscore.without(oktaUnderscore.map(queries, function (value, key) {\n      if (value !== undefined && value !== null) {\n        return key + '=' + encodeURIComponent(value);\n      }\n    }), undefined).join('&');\n\n    return oktaUnderscore.isEmpty(queriesString) ? '' : '?' + queriesString;\n  },\n  isABaseView: function (obj) {\n    return obj instanceof BaseView || obj.prototype instanceof BaseView || obj === BaseView;\n  },\n  isSafari: function () {\n    // All native, android and iOS chrome browsers has \"Safari\" in their userAgent string, so this regex should\n    // evaluate to true for only Safari browser and not any chrome browsers.\n    // https://stackoverflow.com/questions/7944460/detect-safari-browser\n    // https://stackoverflow.com/questions/13807810/ios-chrome-detection/13808053#13808053\n    return /^((?!chrome|android|crios).)*safari/i.test(navigator.userAgent);\n  }\n};\n\nexport { Util as default };\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nexport { default } from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\n\nconst clonedEscapeExpression = _Handlebars2.Utils.escapeExpression;\n\n_Handlebars2.Utils.escapeExpression = function (string) {\n  return clonedEscapeExpression(string).replace(/&#x3D;/g, '=');\n};\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nexport { default } from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../underscore-wrapper.js';\nimport Logger from '../Logger.js';\nimport StringUtil from '../StringUtil.js';\n\n/* eslint @okta/okta-ui/no-specific-modules: 0 */\nconst hbsEscape = _Handlebars2.Utils.escapeExpression;\n\nfunction trim(str) {\n  return str && str.replace(/^\\s+|\\s+$/g, '');\n}\n\nfunction replaceTagsWithPlaceholders(source, tag, tagValue) {\n  const escapedBeginningTag = hbsEscape(`<${tag}>`);\n  const escapedEndTag = hbsEscape(`</${tag}>`);\n  const [beginningTag, endTag] = tagValue.split(tag);\n\n  if (!source.includes(escapedBeginningTag) && !source.includes(escapedEndTag)) {\n    throw Error(`Parsed tag \"${tag}\" is not present in \"${source}\"`);\n  } else if (!tagValue.includes(tag)) {\n    throw Error(`Parsed tag \"${tag}\" is not present in \"${tagValue}\"`);\n  } else if (!beginningTag || !endTag) {\n    throw Error(`Template value \"${tagValue}\" must contain beginning and closing tags`);\n  }\n\n  return source.replace(escapedBeginningTag, beginningTag).replace(escapedEndTag, endTag);\n}\n/* eslint max-statements: [2, 18] */\n\n\n_Handlebars2.registerHelper('i18n', function i18n(options) {\n  let params;\n  const key = trim(options.hash.code);\n  const bundle = trim(options.hash.bundle);\n  const args = trim(options.hash.arguments);\n  const tags = Object.keys(options.hash).filter(prop => prop.match(/^\\$\\d+/)).map(prop => ({\n    tag: prop,\n    value: options.hash[prop]\n  }));\n\n  if (args) {\n    params = oktaUnderscore.map(trim(args).split(';'), function mapParam(param) {\n      param = trim(param);\n      let val;\n      /*\n       * the context(data) may be a deep object, ex {user: {name: 'John', gender: 'M'}}\n       * arguments may be 'user.name'\n       * return data['user']['name']\n       */\n\n      oktaUnderscore.each(param.split('.'), p => {\n        val = val ? val[p] : this[p];\n      });\n\n      return val;\n    }, this);\n  }\n\n  const localizedValue = StringUtil.localize(key, bundle, params);\n\n  if (tags.length < 1) {\n    // No HTML tags provided - return the localized and escaped string\n    return localizedValue;\n  }\n\n  let escapedString = hbsEscape(localizedValue);\n\n  try {\n    tags.forEach(tag => {\n      escapedString = replaceTagsWithPlaceholders(escapedString, tag.tag, tag.value);\n    });\n    return new _Handlebars2.SafeString(escapedString);\n  } catch (err) {\n    Logger.error(err.toString());\n    return localizedValue;\n  }\n});\n","import FrameworkView from './View.js';\nimport oktaUnderscore from '../util/underscore-wrapper.js';\n\n/* eslint-disable max-statements */\n/**\n   * Archer.ListView is a {@link src/framework/View} that operates on a\n   * collection and builds a list of \"things\" of the same type.\n   *\n   * Automagically adds, removes and sorts upon standard collection events.\n   *\n   * Listen to collection events so the ListView will do the right thing when\n   * a model is added or the collection is reset or sorted.\n   *\n   * @class src/framework/ListView\n   * @extends src/framework/View\n   * @param {Object} options options hash\n   * @param {Object} options.collection The collection which this view operates on\n   * @example\n   * var UserList = Archer.ListView.extend({\n   *   tagName: 'ul',\n   *   item: '<li>{{fname}} {{lname}}</li>'\n   * });\n   *\n   * var users = new Archer.Collection([\n   *   {fname: 'John', lname: 'Doe'},\n   *   {fname: 'Jane', lname: 'Doe'}\n   * ]);\n   *\n   * var userList = new UserList({collection: users}).render();\n   * userList.el; //=> \"<ul><li>John Doe</li><li>Jane Doe</li></ul>\"\n   *\n   * users.push({fname: 'Jim', lname: 'Doe'});\n   * userList.el; //=> \"<ul><li>John Doe</li><li>Jane Doe</li><li>Jim Doe</li></ul>\"\n   *\n   * users.first().destroy();\n   * userList.el; //=> \"<ul><li>Jane Doe</li><li>Jim Doe</li></ul>\"\n   */\n\nvar ListView = FrameworkView.extend(\n/** @lends src/framework/ListView.prototype */\n{\n  constructor: function () {\n    FrameworkView.apply(this, arguments);\n\n    if (!this.collection) {\n      throw new Error('Missing collection');\n    }\n\n    this.listenTo(this.collection, 'reset sort', this.reset);\n    this.listenTo(this.collection, 'add', this.addItem);\n\n    if (this.fetchCollection) {\n      this.collection.fetch();\n    } else {\n      this.collection.each(this.addItem, this);\n    }\n  },\n\n  /**\n     * The view/template we will use to render each model in the collection.\n     * @type {String|module:Okta.View}\n     */\n  item: null,\n\n  /**\n     * A selector in the local template where to append each item\n     * @type {String}\n     */\n  itemSelector: null,\n\n  /**\n     * Empty the list and re-add everything from the collection.\n     * Usefull for handling `collection.reset()` or for handling the initial load\n     * @protected\n     */\n  reset: function () {\n    this.removeChildren();\n    this.collection.each((model, index) => {\n      this.addItem(model, index);\n    });\n    return this;\n  },\n\n  /**\n     * Add an item view to the list that will represent one model from the collection\n     *\n     * Listen to the model so when it is destoyed or removed from the collection\n     * this item will remove itself from the list\n     *\n     * @param {Backbone.Model} model The model this row operates on\n     * @protected\n     */\n  addItem: function (model) {\n    var view = this.add(this.item, this.itemSelector, {\n      options: {\n        model: model\n      }\n    }).last();\n\n    if (this.state && this.state.get('trackItemAdded')) {\n      this.state.trigger('itemAdded', view);\n    }\n\n    view.listenTo(model, 'destroy remove', view.remove);\n    return this;\n  },\n  addShowMore: oktaUnderscore.noop\n});\n\nexport { ListView as default };\n","import ListView from '../framework/ListView.js';\nimport BaseView from './BaseView.js';\n\n/**\n * See {@link src/framework/ListView} for more detail and examples from the base class.\n * @class module:Okta.ListView\n * @extends src/framework/ListView\n * @mixes module:Okta.View\n */\n\nvar Backbone_ListView = BaseView.decorate(ListView);\n\nexport { Backbone_ListView as default };\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaJQueryStatic from '../../util/jquery-wrapper.js';\nimport oktaUnderscore from '../../util/underscore-wrapper.js';\nimport BaseView from '../BaseView.js';\n\nconst optionsTemplate = _Handlebars2.template({\n  \"1\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<span class=\\\"icon \" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"icon\") || (depth0 != null ? lookupProperty(depth0, \"icon\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"icon\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 96\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 104\n        }\n      }\n    }) : helper)) + \"\\\"></span>\";\n  },\n  \"3\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return container.escapeExpression((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"title\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 133\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 142\n        }\n      }\n    }) : helper));\n  },\n  \"5\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<p class=\\\"option-subtitle\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"subtitle\") || (depth0 != null ? lookupProperty(depth0, \"subtitle\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"subtitle\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 192\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 204\n        }\n      }\n    }) : helper)) + \"</p>\";\n  },\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    var stack1,\n        helper,\n        alias1 = depth0 != null ? depth0 : container.nullContext || {},\n        alias2 = container.hooks.helperMissing,\n        alias3 = \"function\",\n        alias4 = container.escapeExpression,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<a href=\\\"\\\" class=\\\"icon-16 \" + alias4((helper = (helper = lookupProperty(helpers, \"className\") || (depth0 != null ? lookupProperty(depth0, \"className\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"className\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 26\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 39\n        }\n      }\n    }) : helper)) + \"\\\" data-se=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"seleniumId\") || (depth0 != null ? lookupProperty(depth0, \"seleniumId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"seleniumId\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 50\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 64\n        }\n      }\n    }) : helper)) + \"\\\">\" + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"icon\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(1, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 66\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 120\n        }\n      }\n    })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"title\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(3, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 120\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 149\n        }\n      }\n    })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"subtitle\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(5, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 149\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 215\n        }\n      }\n    })) != null ? stack1 : \"\") + \"</a>\";\n  },\n  \"useData\": true\n});\n\nconst BaseDropDownDropDownOption = BaseView.extend({\n  tagName: 'li',\n  events: {\n    click: function (e) {\n      e.preventDefault();\n      this.action && this.action.call(this);\n    }\n  },\n  constructor: function () {\n    BaseView.apply(this, arguments);\n    this.$el.addClass('okta-dropdown-option option');\n  },\n  render: function () {\n    this.$el.html(optionsTemplate({\n      icon: oktaUnderscore.result(this, 'icon'),\n      className: oktaUnderscore.result(this, 'className') || '',\n      title: oktaUnderscore.result(this, 'title'),\n      subtitle: oktaUnderscore.result(this, 'subtitle'),\n      seleniumId: oktaUnderscore.result(this, 'seleniumId')\n    }));\n\n    if (oktaUnderscore.result(this, 'disabled')) {\n      this.disable();\n    }\n\n    return this;\n  },\n  disable: function () {\n    this.$el.addClass('option-disabled');\n    this.$el.find('a').attr('tabindex', '-1');\n  }\n});\nvar BaseDropDown = BaseView.extend({\n  events: {\n    'click a.option-selected': function (e) {\n      e.preventDefault();\n\n      if (oktaUnderscore.result(this, 'disabled')) {\n        e.stopPropagation();\n      }\n    },\n    'click .dropdown-disabled': function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  },\n  items: [],\n  constructor: function () {\n    const className = this.className; // In this very specific case we want to NOT append className to $el\n    // but to the <a> tag in the template\n    // so we want to disable backbone default functionality.\n\n    this.className = null;\n    BaseView.apply(this, arguments);\n    this.className = className;\n    this.$el.addClass('dropdown more-actions float-l');\n\n    oktaUnderscore.each(oktaUnderscore.result(this, 'items'), function (option) {\n      this.addOption(option, this.options);\n    }, this);\n  },\n  template: _Handlebars2.template({\n    \"1\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<span class=\\\"icon \" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"icon\") || (depth0 != null ? lookupProperty(depth0, \"icon\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"icon\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 176\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 184\n          }\n        }\n      }) : helper)) + \"\\\"></span>\";\n    },\n    \"3\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<span class=\\\"off-screen\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"screenReaderText\") || (depth0 != null ? lookupProperty(depth0, \"screenReaderText\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"screenReaderText\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 249\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 269\n          }\n        }\n      }) : helper)) + \"</span>\";\n    },\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          helper,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          alias2 = container.hooks.helperMissing,\n          alias3 = \"function\",\n          alias4 = container.escapeExpression,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<a href=\\\"#\\\" class=\\\"link-button \" + alias4((helper = (helper = lookupProperty(helpers, \"className\") || (depth0 != null ? lookupProperty(depth0, \"className\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"className\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 31\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 44\n          }\n        }\n      }) : helper)) + \" link-button-icon option-selected center\\\" aria-expanded=\\\"false\\\" aria-controls=\\\"okta-dropdown-options\\\">\" + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"icon\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(1, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 146\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 200\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"screenReaderText\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(3, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 200\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 283\n          }\n        }\n      })) != null ? stack1 : \"\") + \"<span class=\\\"option-selected-text\\\">\" + alias4((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"title\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 318\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 327\n          }\n        }\n      }) : helper)) + \"</span><span class=\\\"icon-dm\\\"></span></a><div id=\\\"okta-dropdown-options\\\" class=\\\"options clearfix\\\"><ul class=\\\"okta-dropdown-list options-wrap clearfix\\\"></ul></div>\";\n    },\n    \"useData\": true\n  }),\n  getTemplateData: function () {\n    const className = [oktaUnderscore.result(this, 'className') || '', oktaUnderscore.result(this, 'disabled') ? 'dropdown-disabled' : ''];\n    return {\n      icon: oktaUnderscore.result(this, 'icon'),\n      className: oktaJQueryStatic.trim(className.join(' ')),\n      title: oktaUnderscore.result(this, 'title'),\n      screenReaderText: oktaUnderscore.result(this, 'screenReaderText')\n    };\n  },\n  addOption: function (proto, options) {\n    this.add(BaseDropDownDropDownOption.extend(proto), 'ul.options-wrap', {\n      options: options || {}\n    });\n  }\n});\n\nexport { BaseDropDown as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport Keys from '../../../util/Keys.js';\nimport Logger from '../../../util/Logger.js';\nimport StringUtil from '../../../util/StringUtil.js';\nimport ViewUtil from '../../../util/ViewUtil.js';\nimport BaseView from '../../BaseView.js';\n\n/* eslint max-params: [2, 6] */\nconst LABEL_OPTIONS = ['model', 'id', 'inputId', 'type', 'label', 'sublabel', 'tooltip', 'name', 'group'];\nconst CONTAINER_OPTIONS = ['wide', 'multi', 'input', 'label-top', 'explain', 'explain-top', 'customExplain', 'model', 'name', 'type', 'autoRender', 'multirowError'];\nconst WRAPPER_OPTIONS = ['model', 'name', 'label-top', 'readOnly', 'events', 'initialize', 'showWhen', 'bindings', 'render', 'className', 'data-se', 'toggleWhen', 'group'];\nconst INPUT_OPTIONS = ['model', 'name', 'inputId', 'type', // base options\n'input', // custom input\n'placeholder', 'label', // labels\n'readOnly', 'read', 'disabled', 'readModeString', // modes\n'options', // select/radio\n'deps', // used to specify inputs that have dependencies and show a callout to user on select\n'from', 'to', // model transformers,\n'autoRender', // model attributes change event to trigger rerendering of the input\n'inlineValidation', // control inline validating against the model on focus lost\n'validateOnlyIfDirty', // check if field has been interacted with and then validate\n'ariaLabel', // 508 compliance for inputs that do not have label associated with them\n'params', 'autoComplete', // autocomplete attribute\n'sortByKey'];\nconst OTHER_OPTIONS = ['errorField' // widgets params - for input specific widgets\n];\n\nconst ALL_OPTIONS = oktaUnderscore.uniq(oktaUnderscore.union(LABEL_OPTIONS, CONTAINER_OPTIONS, WRAPPER_OPTIONS, INPUT_OPTIONS, OTHER_OPTIONS));\n\nconst SAVE_BUTTON_PHASES = ['•         ', '•  •      ', '•  •  •   ', '•  •  •  •', '   •  •  •', '      •  •', '         •', '          ', '          ', '          '];\n\nfunction decorateDoWhen(doWhen) {\n  if (doWhen && !doWhen['__edit__']) {\n    return oktaUnderscore.extend({\n      __edit__: oktaUnderscore.constant(true)\n    }, doWhen);\n  }\n}\n\nfunction createButton(options) {\n  options = oktaUnderscore.pick(options || {}, 'action', 'id', 'className', 'text', 'type');\n  let timeoutId;\n  let intervalId;\n  let phaseCount;\n  return BaseView.extend({\n    tagName: 'input',\n    className: 'button',\n    events: {\n      click: function () {\n        if (options.action && !this.disabled()) {\n          options.action.call(this);\n        }\n      },\n      keyup: function (e) {\n        if (Keys.isEnter(e) && options.action && !this.disabled()) {\n          options.action.call(this);\n        }\n      }\n    },\n    disabled: function () {\n      return this.$el.prop('disabled') === true;\n    },\n    disable: function () {\n      this.$el.prop('disabled', true);\n      this.$el.addClass('btn-disabled');\n    },\n    enable: function () {\n      this.$el.prop('disabled', false);\n      this.$el.removeClass('btn-disabled');\n    },\n    initialize: function () {\n      const self = this;\n      this.$el.attr('type', options.type === 'save' ? 'submit' : 'button');\n      this.$el.val(options.text);\n\n      if (options.id) {\n        this.$el.attr('id', options.id);\n      }\n\n      if (options.className) {\n        this.$el.addClass(options.className);\n      }\n\n      if (options.type) {\n        this.$el.attr('data-type', options.type);\n      }\n\n      this.$el.mousedown(function () {\n        self.model.set('__pending__', true);\n      });\n      this.$el.mouseup(function () {\n        self.model.set('__pending__', false);\n      });\n      this.listenTo(this.model, 'form:set-saving-state', function () {\n        this.disable();\n\n        if (options.type === 'save') {\n          timeoutId = setTimeout(oktaUnderscore.bind(this.__changeSaveText, this), 1000);\n        }\n      });\n      this.listenTo(this.model, 'form:clear-saving-state', function () {\n        this.enable();\n\n        if (options.type === 'save') {\n          clearTimeout(timeoutId);\n          clearInterval(intervalId);\n          this.$el.val(options.text);\n        }\n      });\n    },\n    __changeSaveText: function () {\n      phaseCount = 0;\n      intervalId = setInterval(oktaUnderscore.bind(this.__showLoadingText, this), 200);\n    },\n    __showLoadingText: function () {\n      this.$el.val(SAVE_BUTTON_PHASES[phaseCount++ % SAVE_BUTTON_PHASES.length]);\n    }\n  });\n}\n\nfunction validateInput(options, model) {\n  /* eslint max-statements: 0, complexity: 0 */\n  options || (options = {});\n\n  if (options.type === 'label') {\n    if (!options.label) {\n      Logger.warn('A label input must have a \"label\" parameter', options);\n    }\n\n    return;\n  }\n\n  if (options.type === 'button') {\n    if (!options.title && !options.icon) {\n      Logger.warn('A button input must have a \"title\" and/or an \"icon\" parameter', options);\n    }\n\n    if (!options.click && !options.href) {\n      Logger.warn('A button input must have a \"click\" and/or an \"href\" parameter', options);\n    }\n\n    return;\n  }\n\n  if (!options.name && !options.input) {\n    Logger.warn('Missing \"name\" or \"input\" parameters', options);\n  }\n\n  if (oktaUnderscore.isArray(options.name) && oktaUnderscore.isArray(options.input)) {\n    throw new Error('Not allowed to have both \"name\" and \"input\" defined as array.');\n  }\n\n  if (options.type !== 'list' && options.name && model && model.allows) {\n    let names = [];\n\n    if (oktaUnderscore.isArray(options.name)) {\n      names = options.name;\n    } else {\n      names.push(options.name);\n    }\n\n    oktaUnderscore.each(names, function (name) {\n      if (!model.allows(name)) {\n        throw new Error('field not allowed: ' + options.name);\n      }\n    });\n  }\n\n  if (oktaUnderscore.isArray(options.input) && options.type !== 'list') {\n    oktaUnderscore.each(options.input, function (input) {\n      validateInput(input, model);\n    });\n  }\n\n  const keys = oktaUnderscore.keys(options);\n\n  const intersection = oktaUnderscore.intersection(keys, ALL_OPTIONS);\n\n  if (oktaUnderscore.size(intersection) !== oktaUnderscore.size(options)) {\n    const fields = oktaUnderscore.clone(ALL_OPTIONS);\n\n    Logger.warn('Invalid input parameters', oktaUnderscore.without(keys, ...fields), options);\n  }\n}\n\nfunction generateInputOptions(options, form, createFn) {\n  options = oktaUnderscore.clone(options);\n\n  if (oktaUnderscore.contains(['list', 'group'], options.type)) {\n    options.params = oktaUnderscore.defaults({\n      create: createFn,\n      inputs: oktaUnderscore.map(oktaUnderscore.isArray(options.input) ? options.input : [options.input], function (input) {\n        return oktaUnderscore.first(generateInputOptions(input, form, createFn));\n      })\n    }, options.params || {});\n    delete options.input;\n  }\n\n  const inputs = oktaUnderscore.isArray(options.input) ? oktaUnderscore.clone(options.input) : [options];\n  return oktaUnderscore.map(inputs, function (input) {\n    const target = oktaUnderscore.defaults({\n      model: form.model\n    }, input, oktaUnderscore.omit(options, 'input', 'inputs'), form.options, {\n      id: oktaUnderscore.uniqueId('input'),\n      readOnly: form.isReadOnly(),\n      read: form.hasReadMode()\n    });\n\n    if (form.isReadOnly()) {\n      target.read = target.readOnly = true;\n    }\n\n    return target;\n  });\n}\n\nvar FormUtil = {\n  LABEL_OPTIONS: LABEL_OPTIONS,\n  CONTAINER_OPTIONS: CONTAINER_OPTIONS,\n  WRAPPER_OPTIONS: WRAPPER_OPTIONS,\n  INPUT_OPTIONS: INPUT_OPTIONS,\n  generateInputOptions: generateInputOptions,\n  changeEventString: function (fieldNames) {\n    return 'change:' + fieldNames.join(' change:');\n  },\n  createReadFormButton: function (options) {\n    let action;\n    let text;\n    let ariaLabel;\n\n    if (options.type === 'cancel') {\n      text = ariaLabel = StringUtil.localize('oform.cancel', 'courage');\n\n      action = function () {\n        this.model.trigger('form:cancel');\n      };\n    } else {\n      text = StringUtil.localize('oform.edit', 'courage');\n      ariaLabel = text + ' ' + options.formTitle;\n\n      action = function () {\n        this.model.set('__edit__', true);\n      };\n    }\n\n    return BaseView.extend({\n      tagName: 'a',\n      className: options.className,\n      attributes: {\n        href: '#',\n        'aria-label': ariaLabel\n      },\n      // TODO: refactor to enforce precompiled templates OKTA-309852\n      // eslint-disable-next-line @okta/okta-ui/no-bare-templates\n      template: function () {\n        return oktaUnderscore.escape(text);\n      },\n      events: {\n        click: function (e) {\n          e.preventDefault();\n          action.call(this);\n        }\n      }\n    });\n  },\n  createButton: function (options) {\n    options = oktaUnderscore.clone(options);\n\n    switch (options.type) {\n      case 'save':\n        oktaUnderscore.defaults(options, {\n          className: 'button-primary'\n        });\n\n        break;\n\n      case 'cancel':\n        oktaUnderscore.defaults(options, {\n          className: 'button-clear',\n          text: StringUtil.localize('oform.cancel', 'courage'),\n          action: function () {\n            this.model.trigger('form:cancel');\n          }\n        });\n\n        break;\n\n      case 'previous':\n        oktaUnderscore.defaults(options, {\n          text: StringUtil.localize('oform.previous', 'courage'),\n          action: function () {\n            this.model.trigger('form:previous');\n          }\n        });\n\n        break;\n    }\n\n    return createButton(options);\n  },\n  validateInput: validateInput,\n\n  /**\n   * Applies a show-when logic on a view instance.\n   * The show-when is a map of a model field name -> a boolean or a function that returns a boolean.\n   * The view will toggle based on the field value.\n   *\n   * @param  {Okta.View} view a view instance that has a this.model attached to it\n   * @param  {Object} showWhen\n   */\n  applyShowWhen: function (view, showWhen) {\n    const toggleAndResize = function (bool) {\n      return function () {\n        // The `toggle` is here since an event may be triggered before the el is in the DOM\n        // and in that case slide events may not function as expected.\n        view.$el.toggle(bool);\n        view.model.trigger('form:resize');\n      };\n    };\n\n    ViewUtil.applyDoWhen(view, decorateDoWhen(showWhen), function (bool, options) {\n      if (!options.animate) {\n        view.$el.toggle(bool);\n      } else {\n        view.$el['slide' + (bool ? 'Down' : 'Up')](200, toggleAndResize(bool));\n      }\n    });\n  },\n  applyToggleWhen: function (view, toggleWhen) {\n    ViewUtil.applyDoWhen(view, decorateDoWhen(toggleWhen), function (bool, options) {\n      view.$el.toggle(bool);\n      view.model.trigger('form:resize');\n\n      if (options.animate) {\n        view.render();\n      }\n    });\n  }\n};\n\nexport { FormUtil as default };\n","import BaseView from '../../BaseView.js';\nimport FormUtil from '../helpers/FormUtil.js';\n\nvar ReadModeBar = BaseView.extend({\n  el: '<span class=\"o-form-toggle\" data-type=\"header-btn\"></span>',\n  formTitle: '',\n  modelEvents: {\n    'change:__edit__': 'toggle'\n  },\n  initialize: function () {\n    this.addButton();\n  },\n  addButton: function () {\n    if (this.model.get('__edit__')) {\n      this.add(FormUtil.createReadFormButton({\n        type: 'cancel'\n      }));\n    } else {\n      this.add(FormUtil.createReadFormButton({\n        type: 'edit',\n        formTitle: this.formTitle,\n        className: 'disable-in-read-only'\n      }));\n    }\n  },\n  toggle: function () {\n    this.removeChildren();\n    this.addButton();\n  }\n});\n\nexport { ReadModeBar as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport BaseView from '../../BaseView.js';\nimport FormUtil from '../helpers/FormUtil.js';\n\nconst proto = {\n  className: function () {\n    return 'o-form-button-bar';\n  },\n  buttonOrder: ['previous', 'save', 'cancel'],\n  initialize: function (options) {\n    const buttonConfigs = {\n      previous: {\n        type: 'previous'\n      },\n      save: {\n        type: 'save',\n        text: oktaUnderscore.resultCtx(options, 'save', this),\n        id: oktaUnderscore.resultCtx(options, 'saveId', this),\n        className: oktaUnderscore.resultCtx(options, 'saveClassName', this)\n      },\n      cancel: {\n        type: 'cancel',\n        text: oktaUnderscore.resultCtx(options, 'cancel', this)\n      }\n    };\n\n    this.__getButtonOrder(options).forEach(buttonName => {\n      this.addButton(buttonConfigs[buttonName]);\n    });\n  },\n\n  /**\n   * Adds a buttomn to the toolbar\n   * @param {Object} params button parameters\n   * @param {Object} options {@link Okta.View#add} options\n   */\n  addButton: function (params, options) {\n    return this.add(FormUtil.createButton(params), options);\n  },\n  __getButtonOrder: function (options) {\n    const buttonOrder = oktaUnderscore.resultCtx(options, 'buttonOrder', this, this.buttonOrder);\n\n    const buttonsToSkip = [];\n\n    if (options.noSubmitButton) {\n      buttonsToSkip.push('save');\n    }\n\n    if (options.noCancelButton) {\n      buttonsToSkip.push('cancel');\n    }\n\n    if (!options.hasPrevStep) {\n      buttonsToSkip.push('previous');\n    }\n\n    return oktaUnderscore.without(buttonOrder, ...buttonsToSkip);\n  }\n};\nvar Toolbar = BaseView.extend(proto);\n\nexport { Toolbar as default };\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport BaseView from '../../BaseView.js';\n\nvar ErrorBanner = BaseView.extend({\n  template: _Handlebars2.template({\n    \"1\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<p>\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"errorSummary\") || (depth0 != null ? lookupProperty(depth0, \"errorSummary\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"errorSummary\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 130\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 146\n          }\n        }\n      }) : helper)) + \"</p>\";\n    },\n    \"3\": function (container, depth0, helpers, partials, data) {\n      var lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<p>\" + container.escapeExpression((lookupProperty(helpers, \"i18n\") || depth0 && lookupProperty(depth0, \"i18n\") || container.hooks.helperMissing).call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"i18n\",\n        \"hash\": {\n          \"bundle\": \"courage\",\n          \"code\": \"oform.errorbanner.title\"\n        },\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 161\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 217\n          }\n        }\n      })) + \"</p>\";\n    },\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<div class=\\\"okta-form-infobox-error infobox infobox-error\\\" role=\\\"alert\\\"><span class=\\\"icon error-16\\\"></span>\" + ((stack1 = lookupProperty(helpers, \"if\").call(depth0 != null ? depth0 : container.nullContext || {}, depth0 != null ? lookupProperty(depth0, \"errorSummary\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(1, data, 0),\n        \"inverse\": container.program(3, data, 0),\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 107\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 228\n          }\n        }\n      })) != null ? stack1 : \"\") + \"</div>\";\n    },\n    \"useData\": true\n  }),\n  modelEvents: {\n    'form:clear-errors': 'remove'\n  }\n});\n\nexport { ErrorBanner as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport StringUtil from '../../../util/StringUtil.js';\n\nconst FIELD_REGEX = /^([\\S]+): (.+)$/;\nvar ErrorParser = {\n  /**\n   * Helper function that returns the json output of an xhr objext\n   * @param  {jqXhr} xhr\n   * @return {Object}\n   */\n  getResponseJSON: function (xhr) {\n    try {\n      return xhr.responseJSON || JSON.parse(xhr.responseText);\n    } catch (e) {// ignore error\n    }\n  },\n\n  /**\n   * Parses an error summary to extract a field name and an error message\n   * @param  {String} errorSummary The raw error summary\n   * @return {String[]} An array with two members: [field name, error message]\n   */\n  parseErrorSummary: function (errorSummary) {\n    const matches = errorSummary.match(FIELD_REGEX); // error format is: `fieldName: The field cannot be left blank`\n\n    if (matches) {\n      return [matches[1], matches[2]];\n    }\n  },\n\n  /**\n   * Parses an error cause object to extract a field name from property attribute\n   * and an error message form errorSummary attribute. It looks to see if there is\n   * a custom override/translation for the erorrCause.reason before using the errorSummary\n   * @param  {Object} errorCause object\n   * @return {String[]} An array with two members: [field name, error message]\n   */\n  parseErrorCauseObject: function (errorCause) {\n    if (errorCause.property && errorCause.errorSummary) {\n      const localizedMsg = StringUtil.localize(errorCause.reason);\n      const apiMsg = errorCause.errorSummary;\n      const field = errorCause.property;\n      const errorMessage = localizedMsg.indexOf('L10N_ERROR[') === -1 ? localizedMsg : apiMsg;\n      return [field, errorMessage];\n    }\n  },\n  parseErrors: function (resp) {\n    const responseJSON = this.getResponseJSON(resp);\n    return oktaUnderscore.map(responseJSON && responseJSON.errorCauses || [], function (errorCause) {\n      return ('' + errorCause.errorSummary).replace(FIELD_REGEX, '$2');\n    });\n  },\n\n  /**\n   * Parses the response for errors\n   * Returns a map of field names > array or error messages\n   * Example:\n   * ```javascript\n   * {\n   *   url: ['The field cannot be left blank', 'The field has to be a valid URI'],\n   *   name: ['The field cannot be left blank']\n   * }\n   * ```\n   * @param  {Object} resp\n   * @return {Object}\n   */\n  parseFieldErrors: function (resp) {\n    const responseJSON = this.getResponseJSON(resp);\n    const errors = {}; // xhr error object\n\n    if (responseJSON) {\n      /* eslint complexity: [2, 9] */\n      oktaUnderscore.each(responseJSON.errorCauses || [], function (cause) {\n        let res = [];\n\n        if (cause.property && cause.errorSummary) {\n          res = this.parseErrorCauseObject(cause);\n        } else if (cause.location && cause.errorSummary) {\n          // To handle new api error format for field level errors.\n          // Ignoring the reason attribute as the translation happens in the API layer and not in the client any more.\n          res = [cause.location, cause.errorSummary];\n        } else {\n          res = this.parseErrorSummary(cause && cause.errorSummary || '');\n        }\n\n        if (res) {\n          const fieldName = res[0];\n          const message = res[1];\n          errors[fieldName] || (errors[fieldName] = []);\n          errors[fieldName].push(message);\n        }\n      }, this);\n    } // validation key/value object\n    else if (oktaUnderscore.isObject(resp) && oktaUnderscore.size(resp)) {\n      oktaUnderscore.each(resp, function (msg, field) {\n        errors[field] = [msg];\n      });\n    }\n\n    return oktaUnderscore.size(errors) ? errors : undefined;\n  }\n};\n\nexport { ErrorParser as default };\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport Logger from '../../../util/Logger.js';\nimport Util from '../../../util/Util.js';\nimport StringUtil from '../../../util/StringUtil.js';\nimport BaseView from '../../BaseView.js';\n\nconst isABaseView = Util.isABaseView;\n/**\n * @class InputContainer\n * @private\n *\n * TODO: OKTA-80796\n * Attention: Please change with caution since this is used in other places\n */\n\nvar InputContainer = BaseView.extend({\n  attributes: function () {\n    return {\n      'data-se': 'o-form-input-container'\n    };\n  },\n  className: function () {\n    let className = 'o-form-input';\n\n    if (this.options.wide) {\n      className += ' o-form-wide';\n    }\n\n    if (oktaUnderscore.contains([1, 2, 3, 4], this.options.multi)) {\n      className += ' o-form-multi-input-' + this.options.multi;\n\n      if (oktaUnderscore.isArray(this.options.input)) {\n        const inputGroup = oktaUnderscore.find(this.options.input, function (input) {\n          return oktaUnderscore.contains(['text+select', 'select+text'], input.options.type);\n        });\n\n        inputGroup && (className += ' o-form-multi-input-group-' + this.options.multi);\n      }\n    }\n\n    return className;\n  },\n  _getNames: function () {\n    const names = oktaUnderscore.isArray(this.options.name) ? this.options.name : [this.options.name];\n    /*eslint complexity: 0 */\n\n    if (this.options.type === 'group') {\n      names.push.apply(names, oktaUnderscore.pluck(this.options.input[0].options.params.inputs, 'name'));\n    } else if (oktaUnderscore.isArray(this.options.name)) {\n      if (this.options.input && this.options.input.options && this.options.input.options.name) {\n        names.push(this.options.input.options.name);\n      }\n    } else if (this.options.input) {\n      if (oktaUnderscore.isArray(this.options.input)) {\n        oktaUnderscore.each(this.options.input, function (inputItem) {\n          names.push(inputItem.options.name);\n        });\n      } else {\n        names.push(this.options.input.options.name);\n      }\n    }\n\n    return oktaUnderscore.uniq(oktaUnderscore.compact(names));\n  },\n  _getInputElement: function () {\n    // NOTE: this.options.input is sometimes not an array under test\n    const lastInput = Array.isArray(this.options.input) ? oktaUnderscore.last(this.options.input) : this.options.input; // FIXME: replace with _.get\n\n    const id = lastInput && lastInput.options && lastInput.options.inputId;\n    const el = id ? this.$('#' + id) : null;\n    return el && el.length ? el : null;\n  },\n  constructor: function () {\n    /* eslint max-statements: [2, 18] */\n    BaseView.apply(this, arguments);\n    const explainTop = this.options['explain-top'] && this.options['label-top'];\n\n    if (this.options.input) {\n      if (oktaUnderscore.isArray(this.options.input)) {\n        oktaUnderscore.each(this.options.input, function (inputItem) {\n          this.add(inputItem, {\n            prepend: !explainTop\n          });\n        }, this);\n      } else {\n        this.add(this.options.input, {\n          prepend: !explainTop\n        });\n      }\n    }\n\n    this.__setExplain(this.options);\n\n    const names = this._getNames();\n\n    this.listenTo(this.model, 'form:field-error', function (name, errors) {\n      if (oktaUnderscore.contains(names, name)) {\n        this.__setError(errors, explainTop);\n      }\n    });\n    this.listenTo(this.model, 'form:clear-errors change:' + names.join(' change:'), this.__clearError);\n    this.listenTo(this.model, 'form:clear-error:' + names.join(' form:clear-error:'), this.__clearError);\n\n    if (oktaUnderscore.resultCtx(this.options, 'autoRender', this)) {\n      this.listenTo(this.model, 'change:' + this.options.name, this.render);\n    }\n\n    this.__errorState = false;\n  },\n\n  /**\n   * Populates the explain on the input container (if it exists). There are\n   * two ways to use this:\n   * 1. Raw text - wraps in the correct html template\n   * 2. Custom html\n   *    - pass in a View class (preferred)\n   *    - pass in an instance of a View\n   * Some additional notes:\n   * - You can pass a function that returns any of the above\n   * - This maintains support for the deprecated \"customExplain\" property\n   *   that was used before. This pattern is superseded by explain, so use\n   *   that instead.\n   * @private\n   */\n  __setExplain: function (options) {\n    let explain; // Deprecated - if you need custom html, use explain instead\n\n    if (options.customExplain) {\n      Logger.warn('Deprecated - use explain instead of customExplain');\n      this.add(this.options.customExplain);\n      return;\n    }\n\n    explain = options.explain;\n\n    if (oktaUnderscore.isFunction(explain) && !isABaseView(explain)) {\n      explain = oktaUnderscore.resultCtx(this.options, 'explain', this);\n    }\n\n    if (!explain) {\n      return;\n    }\n\n    if (isABaseView(explain)) {\n      this.template = _Handlebars2.template({\n        \"compiler\": [8, \">= 4.3.0\"],\n        \"main\": function (container, depth0, helpers, partials, data) {\n          return \"<p class=\\\"o-form-explain\\\"></p>\";\n        },\n        \"useData\": true\n      });\n      this.add(explain, ' > .o-form-explain');\n    } else {\n      this.template = _Handlebars2.template({\n        \"compiler\": [8, \">= 4.3.0\"],\n        \"main\": function (container, depth0, helpers, partials, data) {\n          var helper,\n              lookupProperty = container.lookupProperty || function (parent, propertyName) {\n            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n              return parent[propertyName];\n            }\n\n            return undefined;\n          };\n\n          return \"<p class=\\\"o-form-explain\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"explain\") || (depth0 != null ? lookupProperty(depth0, \"explain\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n            \"name\": \"explain\",\n            \"hash\": {},\n            \"data\": data,\n            \"loc\": {\n              \"start\": {\n                \"line\": 1,\n                \"column\": 26\n              },\n              \"end\": {\n                \"line\": 1,\n                \"column\": 37\n              }\n            }\n          }) : helper)) + \"</p>\";\n        },\n        \"useData\": true\n      });\n    }\n  },\n\n  /**\n   * Highlight the input as invalid (validation failed)\n   * Adds an explaination message of the error\n   * @private\n   */\n  __setError: function (errors, explainTop) {\n    this.__errorState = true;\n    this.$el.addClass('o-form-has-errors');\n\n    const errorId = oktaUnderscore.uniqueId('input-container-error');\n\n    const html = this.__getHTMLForError(oktaUnderscore.flatten(errors), errorId);\n\n    const $elExplain = this.$('.o-form-explain').not('.o-form-input-error').first();\n\n    if ($elExplain.length && !explainTop) {\n      $elExplain.before(html);\n    } else {\n      this.$el.append(html);\n    }\n\n    const target = this._getInputElement() || this.$el;\n    target.attr('aria-describedby', errorId);\n    target.attr('aria-invalid', true);\n  },\n  __getHTMLForError: function (errors, errorId) {\n    const tmpl = _Handlebars2.template({\n      \"compiler\": [8, \">= 4.3.0\"],\n      \"main\": function (container, depth0, helpers, partials, data) {\n        var helper,\n            alias1 = depth0 != null ? depth0 : container.nullContext || {},\n            alias2 = container.hooks.helperMissing,\n            alias3 = \"function\",\n            alias4 = container.escapeExpression,\n            lookupProperty = container.lookupProperty || function (parent, propertyName) {\n          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n            return parent[propertyName];\n          }\n\n          return undefined;\n        };\n\n        return \"<p id=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"errorId\") || (depth0 != null ? lookupProperty(depth0, \"errorId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n          \"name\": \"errorId\",\n          \"hash\": {},\n          \"data\": data,\n          \"loc\": {\n            \"start\": {\n              \"line\": 1,\n              \"column\": 7\n            },\n            \"end\": {\n              \"line\": 1,\n              \"column\": 18\n            }\n          }\n        }) : helper)) + \"\\\" class=\\\"okta-form-input-error o-form-input-error o-form-explain\\\" role=\\\"alert\\\"><span class=\\\"icon icon-16 error-16-small\\\" role=\\\"img\\\" aria-label=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"iconLabel\") || (depth0 != null ? lookupProperty(depth0, \"iconLabel\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n          \"name\": \"iconLabel\",\n          \"hash\": {},\n          \"data\": data,\n          \"loc\": {\n            \"start\": {\n              \"line\": 1,\n              \"column\": 162\n            },\n            \"end\": {\n              \"line\": 1,\n              \"column\": 175\n            }\n          }\n        }) : helper)) + \"\\\"></span>\" + alias4((helper = (helper = lookupProperty(helpers, \"text\") || (depth0 != null ? lookupProperty(depth0, \"text\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n          \"name\": \"text\",\n          \"hash\": {},\n          \"data\": data,\n          \"loc\": {\n            \"start\": {\n              \"line\": 1,\n              \"column\": 184\n            },\n            \"end\": {\n              \"line\": 1,\n              \"column\": 192\n            }\n          }\n        }) : helper)) + \"</p>\";\n      },\n      \"useData\": true\n    });\n\n    const iconLabel = StringUtil.localize('oform.error.icon.ariaLabel', 'courage'); // 'Error'\n\n    if (this.options.multirowError) {\n      let html = '';\n      errors.forEach(error => {\n        html = html + tmpl({\n          errorId: errorId,\n          iconLabel: iconLabel,\n          text: error\n        });\n      });\n      return html;\n    }\n\n    return tmpl({\n      errorId: errorId,\n      iconLabel: iconLabel,\n      text: errors.join(', ')\n    });\n  },\n\n  /**\n   * Un-highlight the input and remove explaination text\n   * @private\n   */\n  __clearError: function () {\n    if (this.__errorState) {\n      this.$('.o-form-input-error').remove();\n      const target = this._getInputElement() || this.$el;\n      target.attr('aria-describedby', null);\n      target.attr('aria-invalid', null);\n      this.$el.removeClass('o-form-has-errors');\n      this.__errorState = false;\n\n      oktaUnderscore.defer(() => {\n        this.model.trigger('form:resize');\n      });\n    }\n  },\n  focus: function () {\n    this.each(function (view) {\n      if (view.focus) {\n        return view.focus();\n      }\n    });\n    return this;\n  }\n});\n\nexport { InputContainer as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\n\nconst registry = {};\n\nfunction isBaseInput(input) {\n  if (oktaUnderscore.isFunction(input)) {\n    return oktaUnderscore.isFunction(input.prototype.editMode) && oktaUnderscore.isFunction(input.prototype.readMode);\n  } else {\n    return oktaUnderscore.isObject(input) && oktaUnderscore.isFunction(input.editMode) && oktaUnderscore.isFunction(input.readMode);\n  }\n}\n/**\n * @class module:Okta.internal.views.forms.helpers.InputRegistry\n */\n\n\nvar InputRegistry = /** @lends module:Okta.internal.views.forms.helpers.InputRegistry */\n{\n  isBaseInput: isBaseInput,\n\n  /**\n   * Register a form input\n   * @param {String} type string identifier for the input\n   * @param {BaseInput} input the input to register\n   * @return {void}\n   */\n  register: function (type, input) {\n    registry[type] = input;\n  },\n\n  /**\n   * Get a form input by type\n   * @param {Object} options input definition\n   * @param {String} options.type string identifier for the input\n   * @return {BaseInput} a matching input\n   */\n  get: function (options) {\n    const input = registry[options.type];\n    return input && (isBaseInput(input) ? input : input(options));\n  },\n\n  /**\n   * Unregister an input type\n   * @param {String} type\n   */\n  unregister: function (type) {\n    delete registry[type];\n  }\n};\n\nexport { InputRegistry as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport InputRegistry from './InputRegistry.js';\n\n/* eslint complexity: 0, max-statements: 0 */\n\nfunction createInput(Input, options) {\n  if (InputRegistry.isBaseInput(Input)) {\n    return Input.prototype ? new Input(oktaUnderscore.omit(options, 'input')) : Input;\n  } else {\n    return Input;\n  }\n}\n\nfunction create(options) {\n  options = oktaUnderscore.clone(options);\n\n  if (options.input) {\n    return createInput(options.input, options);\n  }\n\n  const Input = InputRegistry.get(options);\n\n  if (!Input) {\n    throw new Error('unknown input: ' + options.type);\n  }\n\n  return createInput(Input, options);\n}\n\nfunction supports(options) {\n  return !!options.input || !!InputRegistry.get(options);\n}\n\nvar InputFactory = {\n  create: create,\n  supports: supports\n};\n\nexport { InputFactory as default };\n","/*\n * qTip2 - Pretty powerful tooltips - v3.0.3-5-g\n * http://qtip2.com\n *\n * Copyright (c) 2017 \n * Released under the MIT licenses\n * http://jquery.org/license\n *\n * Date: Wed May 24 2017 01:22 UTC+0000\n * Plugins: tips modal viewport svg imagemap ie6\n * Styles: core basic css3\n */\n/*global window: false, jQuery: false, console: false, define: false */\n\n// Modified to support ESM - OKTA-369648\nimport jQuery from 'jquery';\n\n/* Cache window, document, undefined */\n(function( window, document, undefined ) {\n\n(function( factory ) {\n\t\"use strict\";\n \tif(!jQuery.fn.qtip) {\n\t\tfactory(jQuery);\n\t}\n}\n(function($) {\n\t\"use strict\"; // Enable ECMAScript \"strict\" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/\n;// Munge the primitives - Paul Irish tip\nvar TRUE = true,\nFALSE = false,\nNULL = null,\n\n// Common variables\nX = 'x', Y = 'y',\nWIDTH = 'width',\nHEIGHT = 'height',\n\n// Positioning sides\nTOP = 'top',\nLEFT = 'left',\nBOTTOM = 'bottom',\nRIGHT = 'right',\nCENTER = 'center',\n\n// Position adjustment types\nFLIP = 'flip',\nFLIPINVERT = 'flipinvert',\nSHIFT = 'shift',\n\n// Shortcut vars\nQTIP, PROTOTYPE, CORNER, CHECKS,\nPLUGINS = {},\nNAMESPACE = 'qtip',\nATTR_HAS = 'data-hasqtip',\nATTR_ID = 'data-qtip-id',\nWIDGET = ['ui-widget', 'ui-tooltip'],\nSELECTOR = '.'+NAMESPACE,\nINACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '),\n\nCLASS_FIXED = NAMESPACE+'-fixed',\nCLASS_DEFAULT = NAMESPACE + '-default',\nCLASS_FOCUS = NAMESPACE + '-focus',\nCLASS_HOVER = NAMESPACE + '-hover',\nCLASS_DISABLED = NAMESPACE+'-disabled',\n\nreplaceSuffix = '_replacedByqTip',\noldtitle = 'oldtitle',\ntrackingBound,\n\n// Browser detection\nBROWSER = {\n\t/*\n\t * IE version detection\n\t *\n\t * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment\n\t * Credit to James Padolsey for the original implemntation!\n\t */\n\tie: (function() {\n\t\t/* eslint-disable no-empty */\n\t\tvar v, i;\n\t\tfor (\n\t\t\tv = 4, i = document.createElement('div');\n\t\t\t(i.innerHTML = '<!--[if gt IE ' + v + ']><i></i><![endif]-->') && i.getElementsByTagName('i')[0];\n\t\t\tv+=1\n\t\t) {}\n\t\treturn v > 4 ? v : NaN;\n\t\t/* eslint-enable no-empty */\n\t})(),\n\n\t/*\n\t * iOS version detection\n\t */\n\tiOS: parseFloat(\n\t\t('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1])\n\t\t.replace('undefined', '3_2').replace('_', '.').replace('_', '')\n\t) || FALSE\n};\n;function QTip(target, options, id, attr) {\n\t// Elements and ID\n\tthis.id = id;\n\tthis.target = target;\n\tthis.tooltip = NULL;\n\tthis.elements = { target: target };\n\n\t// Internal constructs\n\tthis._id = NAMESPACE + '-' + id;\n\tthis.timers = { img: {} };\n\tthis.options = options;\n\tthis.plugins = {};\n\n\t// Cache object\n\tthis.cache = {\n\t\tevent: {},\n\t\ttarget: $(),\n\t\tdisabled: FALSE,\n\t\tattr: attr,\n\t\tonTooltip: FALSE,\n\t\tlastClass: ''\n\t};\n\n\t// Set the initial flags\n\tthis.rendered = this.destroyed = this.disabled = this.waiting =\n\t\tthis.hiddenDuringWait = this.positioning = this.triggering = FALSE;\n}\nPROTOTYPE = QTip.prototype;\n\nPROTOTYPE._when = function(deferreds) {\n\treturn $.when.apply($, deferreds);\n};\n\nPROTOTYPE.render = function(show) {\n\tif(this.rendered || this.destroyed) { return this; } // If tooltip has already been rendered, exit\n\n\tvar self = this,\n\t\toptions = this.options,\n\t\tcache = this.cache,\n\t\telements = this.elements,\n\t\ttext = options.content.text,\n\t\ttitle = options.content.title,\n\t\tbutton = options.content.button,\n\t\tposOptions = options.position,\n\t\tdeferreds = [];\n\n\t// Add ARIA attributes to target\n\t$.attr(this.target[0], 'aria-describedby', this._id);\n\n\t// Create public position object that tracks current position corners\n\tcache.posClass = this._createPosClass(\n\t\t(this.position = { my: posOptions.my, at: posOptions.at }).my\n\t);\n\n\t// Create tooltip element\n\tthis.tooltip = elements.tooltip = $('<div/>', {\n\t\t'id': this._id,\n\t\t'class': [ NAMESPACE, CLASS_DEFAULT, options.style.classes, cache.posClass ].join(' '),\n\t\t'width': options.style.width || '',\n\t\t'height': options.style.height || '',\n\t\t'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse,\n\n\t\t/* ARIA specific attributes */\n\t\t'role': 'alert',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': FALSE,\n\t\t'aria-describedby': this._id + '-content',\n\t\t'aria-hidden': TRUE\n\t})\n\t.toggleClass(CLASS_DISABLED, this.disabled)\n\t.attr(ATTR_ID, this.id)\n\t.data(NAMESPACE, this)\n\t.appendTo(posOptions.container)\n\t.append(\n\t\t// Create content element\n\t\telements.content = $('<div />', {\n\t\t\t'class': NAMESPACE + '-content',\n\t\t\t'id': this._id + '-content',\n\t\t\t'aria-atomic': TRUE\n\t\t})\n\t);\n\n\t// Set rendered flag and prevent redundant reposition calls for now\n\tthis.rendered = -1;\n\tthis.positioning = TRUE;\n\n\t// Create title...\n\tif(title) {\n\t\tthis._createTitle();\n\n\t\t// Update title only if its not a callback (called in toggle if so)\n\t\tif(!$.isFunction(title)) {\n\t\t\tdeferreds.push( this._updateTitle(title, FALSE) );\n\t\t}\n\t}\n\n\t// Create button\n\tif(button) { this._createButton(); }\n\n\t// Set proper rendered flag and update content if not a callback function (called in toggle)\n\tif(!$.isFunction(text)) {\n\t\tdeferreds.push( this._updateContent(text, FALSE) );\n\t}\n\tthis.rendered = TRUE;\n\n\t// Setup widget classes\n\tthis._setWidget();\n\n\t// Initialize 'render' plugins\n\t$.each(PLUGINS, function(name) {\n\t\tvar instance;\n\t\tif(this.initialize === 'render' && (instance = this(self))) {\n\t\t\tself.plugins[name] = instance;\n\t\t}\n\t});\n\n\t// Unassign initial events and assign proper events\n\tthis._unassignEvents();\n\tthis._assignEvents();\n\n\t// When deferreds have completed\n\tthis._when(deferreds).then(function() {\n\t\t// tooltiprender event\n\t\tself._trigger('render');\n\n\t\t// Reset flags\n\t\tself.positioning = FALSE;\n\n\t\t// Show tooltip if not hidden during wait period\n\t\tif(!self.hiddenDuringWait && (options.show.ready || show)) {\n\t\t\tself.toggle(TRUE, cache.event, FALSE);\n\t\t}\n\t\tself.hiddenDuringWait = FALSE;\n\t});\n\n\t// Expose API\n\tQTIP.api[this.id] = this;\n\n\treturn this;\n};\n\nPROTOTYPE.destroy = function(immediate) {\n\t// Set flag the signify destroy is taking place to plugins\n\t// and ensure it only gets destroyed once!\n\tif(this.destroyed) { return this.target; }\n\n\tfunction process() {\n\t\tif(this.destroyed) { return; }\n\t\tthis.destroyed = TRUE;\n\n\t\tvar target = this.target,\n\t\t\ttitle = target.attr(oldtitle),\n\t\t\ttimer;\n\n\t\t// Destroy tooltip if rendered\n\t\tif(this.rendered) {\n\t\t\tthis.tooltip.stop(1,0).find('*').remove().end().remove();\n\t\t}\n\n\t\t// Destroy all plugins\n\t\t$.each(this.plugins, function() {\n\t\t\tthis.destroy && this.destroy();\n\t\t});\n\n\t\t// Clear timers\n\t\tfor (timer in this.timers) {\n\t\t\tif (this.timers.hasOwnProperty(timer)) {\n\t\t\t\tclearTimeout(this.timers[timer]);\n\t\t\t}\n\t\t}\n\n\t\t// Remove api object and ARIA attributes\n\t\ttarget.removeData(NAMESPACE)\n\t\t\t.removeAttr(ATTR_ID)\n\t\t\t.removeAttr(ATTR_HAS)\n\t\t\t.removeAttr('aria-describedby');\n\n\t\t// Reset old title attribute if removed\n\t\tif(this.options.suppress && title) {\n\t\t\ttarget.attr('title', title).removeAttr(oldtitle);\n\t\t}\n\n\t\t// Remove qTip events associated with this API\n\t\tthis._unassignEvents();\n\n\t\t// Remove ID from used id objects, and delete object references\n\t\t// for better garbage collection and leak protection\n\t\tthis.options = this.elements = this.cache = this.timers =\n\t\t\tthis.plugins = this.mouse = NULL;\n\n\t\t// Delete epoxsed API object\n\t\tdelete QTIP.api[this.id];\n\t}\n\n\t// If an immediate destroy is needed\n\tif((immediate !== TRUE || this.triggering === 'hide') && this.rendered) {\n\t\tthis.tooltip.one('tooltiphidden', $.proxy(process, this));\n\t\t!this.triggering && this.hide();\n\t}\n\n\t// If we're not in the process of hiding... process\n\telse { process.call(this); }\n\n\treturn this.target;\n};\n;function invalidOpt(a) {\n\treturn a === NULL || $.type(a) !== 'object';\n}\n\nfunction invalidContent(c) {\n\treturn !($.isFunction(c) || \n            c && c.attr || \n            c.length || \n            $.type(c) === 'object' && (c.jquery || c.then));\n}\n\n// Option object sanitizer\nfunction sanitizeOptions(opts) {\n\tvar content, text, ajax, once;\n\n\tif(invalidOpt(opts)) { return FALSE; }\n\n\tif(invalidOpt(opts.metadata)) {\n\t\topts.metadata = { type: opts.metadata };\n\t}\n\n\tif('content' in opts) {\n\t\tcontent = opts.content;\n\n\t\tif(invalidOpt(content) || content.jquery || content.done) {\n\t\t\ttext = invalidContent(content) ? FALSE : content;\n\t\t\tcontent = opts.content = {\n\t\t\t\ttext: text\n\t\t\t};\n\t\t}\n\t\telse { text = content.text; }\n\n\t\t// DEPRECATED - Old content.ajax plugin functionality\n\t\t// Converts it into the proper Deferred syntax\n\t\tif('ajax' in content) {\n\t\t\tajax = content.ajax;\n\t\t\tonce = ajax && ajax.once !== FALSE;\n\t\t\tdelete content.ajax;\n\n\t\t\tcontent.text = function(event, api) {\n\t\t\t\tvar loading = text || $(this).attr(api.options.content.attr) || 'Loading...',\n\n\t\t\t\tdeferred = $.ajax(\n\t\t\t\t\t$.extend({}, ajax, { context: api })\n\t\t\t\t)\n\t\t\t\t.then(ajax.success, NULL, ajax.error)\n\t\t\t\t.then(function(newContent) {\n\t\t\t\t\tif(newContent && once) { api.set('content.text', newContent); }\n\t\t\t\t\treturn newContent;\n\t\t\t\t},\n\t\t\t\tfunction(xhr, status, error) {\n\t\t\t\t\tif(api.destroyed || xhr.status === 0) { return; }\n\t\t\t\t\tapi.set('content.text', status + ': ' + error);\n\t\t\t\t});\n\n\t\t\t\treturn !once ? (api.set('content.text', loading), deferred) : loading;\n\t\t\t};\n\t\t}\n\n\t\tif('title' in content) {\n\t\t\tif($.isPlainObject(content.title)) {\n\t\t\t\tcontent.button = content.title.button;\n\t\t\t\tcontent.title = content.title.text;\n\t\t\t}\n\n\t\t\tif(invalidContent(content.title || FALSE)) {\n\t\t\t\tcontent.title = FALSE;\n\t\t\t}\n\t\t}\n\t}\n\n\tif('position' in opts && invalidOpt(opts.position)) {\n\t\topts.position = { my: opts.position, at: opts.position };\n\t}\n\n\tif('show' in opts && invalidOpt(opts.show)) {\n\t\topts.show = opts.show.jquery ? { target: opts.show } :\n\t\t\topts.show === TRUE ? { ready: TRUE } : { event: opts.show };\n\t}\n\n\tif('hide' in opts && invalidOpt(opts.hide)) {\n\t\topts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide };\n\t}\n\n\tif('style' in opts && invalidOpt(opts.style)) {\n\t\topts.style = { classes: opts.style };\n\t}\n\n\t// Sanitize plugin options\n\t$.each(PLUGINS, function() {\n\t\tthis.sanitize && this.sanitize(opts);\n\t});\n\n\treturn opts;\n}\n\n// Setup builtin .set() option checks\nCHECKS = PROTOTYPE.checks = {\n\tbuiltin: {\n\t\t// Core checks\n\t\t'^id$': function(obj, o, v, prev) {\n\t\t\tvar id = v === TRUE ? QTIP.nextid : v,\n\t\t\t\tnewId = NAMESPACE + '-' + id;\n\n\t\t\tif(id !== FALSE && id.length > 0 && !$('#'+newId).length) {\n\t\t\t\tthis._id = newId;\n\n\t\t\t\tif(this.rendered) {\n\t\t\t\t\tthis.tooltip[0].id = this._id;\n\t\t\t\t\tthis.elements.content[0].id = this._id + '-content';\n\t\t\t\t\tthis.elements.title[0].id = this._id + '-title';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { obj[o] = prev; }\n\t\t},\n\t\t'^prerender': function(obj, o, v) {\n\t\t\tv && !this.rendered && this.render(this.options.show.ready);\n\t\t},\n\n\t\t// Content checks\n\t\t'^content.text$': function(obj, o, v) {\n\t\t\tthis._updateContent(v);\n\t\t},\n\t\t'^content.attr$': function(obj, o, v, prev) {\n\t\t\tif(this.options.content.text === this.target.attr(prev)) {\n\t\t\t\tthis._updateContent( this.target.attr(v) );\n\t\t\t}\n\t\t},\n\t\t'^content.title$': function(obj, o, v) {\n\t\t\t// Remove title if content is null\n\t\t\tif(!v) { return this._removeTitle(); }\n\n\t\t\t// If title isn't already created, create it now and update\n\t\t\tv && !this.elements.title && this._createTitle();\n\t\t\tthis._updateTitle(v);\n\t\t},\n\t\t'^content.button$': function(obj, o, v) {\n\t\t\tthis._updateButton(v);\n\t\t},\n\t\t'^content.title.(text|button)$': function(obj, o, v) {\n\t\t\tthis.set('content.'+o, v); // Backwards title.text/button compat\n\t\t},\n\n\t\t// Position checks\n\t\t'^position.(my|at)$': function(obj, o, v){\n\t\t\tif('string' === typeof v) {\n\t\t\t\tthis.position[o] = obj[o] = new CORNER(v, o === 'at');\n\t\t\t}\n\t\t},\n\t\t'^position.container$': function(obj, o, v){\n\t\t\tthis.rendered && this.tooltip.appendTo(v);\n\t\t},\n\n\t\t// Show checks\n\t\t'^show.ready$': function(obj, o, v) {\n\t\t\tv && (!this.rendered && this.render(TRUE) || this.toggle(TRUE));\n\t\t},\n\n\t\t// Style checks\n\t\t'^style.classes$': function(obj, o, v, p) {\n\t\t\tthis.rendered && this.tooltip.removeClass(p).addClass(v);\n\t\t},\n\t\t'^style.(width|height)': function(obj, o, v) {\n\t\t\tthis.rendered && this.tooltip.css(o, v);\n\t\t},\n\t\t'^style.widget|content.title': function() {\n\t\t\tthis.rendered && this._setWidget();\n\t\t},\n\t\t'^style.def': function(obj, o, v) {\n\t\t\tthis.rendered && this.tooltip.toggleClass(CLASS_DEFAULT, !!v);\n\t\t},\n\n\t\t// Events check\n\t\t'^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) {\n\t\t\tthis.rendered && this.tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v);\n\t\t},\n\n\t\t// Properties which require event reassignment\n\t\t'^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() {\n\t\t\tif(!this.rendered) { return; }\n\n\t\t\t// Set tracking flag\n\t\t\tvar posOptions = this.options.position;\n\t\t\tthis.tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse);\n\n\t\t\t// Reassign events\n\t\t\tthis._unassignEvents();\n\t\t\tthis._assignEvents();\n\t\t}\n\t}\n};\n\n// Dot notation converter\nfunction convertNotation(options, notation) {\n\tvar i = 0, obj, option = options,\n\n\t// Split notation into array\n\tlevels = notation.split('.');\n\n\t// Loop through\n\twhile(option = option[ levels[i++] ]) {\n\t\tif(i < levels.length) { obj = option; }\n\t}\n\n\treturn [obj || options, levels.pop()];\n}\n\nPROTOTYPE.get = function(notation) {\n\tif(this.destroyed) { return this; }\n\n\tvar o = convertNotation(this.options, notation.toLowerCase()),\n\t\tresult = o[0][ o[1] ];\n\n\treturn result.precedance ? result.string() : result;\n};\n\nfunction setCallback(notation, args) {\n\tvar category, rule, match;\n\n\tfor(category in this.checks) {\n\t\tif (!this.checks.hasOwnProperty(category)) { continue; }\n\n\t\tfor(rule in this.checks[category]) {\n\t\t\tif (!this.checks[category].hasOwnProperty(rule)) { continue; }\n\n\t\t\tif(match = (new RegExp(rule, 'i')).exec(notation)) {\n\t\t\t\targs.push(match);\n\n\t\t\t\tif(category === 'builtin' || this.plugins[category]) {\n\t\t\t\t\tthis.checks[category][rule].apply(\n\t\t\t\t\t\tthis.plugins[category] || this, args\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar rmove = /^position\\.(my|at|adjust|target|container|viewport)|style|content|show\\.ready/i,\n\trrender = /^prerender|show\\.ready/i;\n\nPROTOTYPE.set = function(option, value) {\n\tif(this.destroyed) { return this; }\n\n\tvar rendered = this.rendered,\n\t\treposition = FALSE,\n\t\toptions = this.options,\n\t\tname;\n\n\t// Convert singular option/value pair into object form\n\tif('string' === typeof option) {\n\t\tname = option; option = {}; option[name] = value;\n\t}\n\telse { option = $.extend({}, option); }\n\n\t// Set all of the defined options to their new values\n\t$.each(option, function(notation, val) {\n\t\tif(rendered && rrender.test(notation)) {\n\t\t\tdelete option[notation]; return;\n\t\t}\n\n\t\t// Set new obj value\n\t\tvar obj = convertNotation(options, notation.toLowerCase()), previous;\n\t\tprevious = obj[0][ obj[1] ];\n\t\tobj[0][ obj[1] ] = val && val.nodeType ? $(val) : val;\n\n\t\t// Also check if we need to reposition\n\t\treposition = rmove.test(notation) || reposition;\n\n\t\t// Set the new params for the callback\n\t\toption[notation] = [obj[0], obj[1], val, previous];\n\t});\n\n\t// Re-sanitize options\n\tsanitizeOptions(options);\n\n\t/*\n\t * Execute any valid callbacks for the set options\n\t * Also set positioning flag so we don't get loads of redundant repositioning calls.\n\t */\n\tthis.positioning = TRUE;\n\t$.each(option, $.proxy(setCallback, this));\n\tthis.positioning = FALSE;\n\n\t// Update position if needed\n\tif(this.rendered && this.tooltip[0].offsetWidth > 0 && reposition) {\n\t\tthis.reposition( options.position.target === 'mouse' ? NULL : this.cache.event );\n\t}\n\n\treturn this;\n};\n;PROTOTYPE._update = function(content, element) {\n\tvar self = this,\n\t\tcache = this.cache;\n\n\t// Make sure tooltip is rendered and content is defined. If not return\n\tif(!this.rendered || !content) { return FALSE; }\n\n\t// Use function to parse content\n\tif($.isFunction(content)) {\n\t\tcontent = content.call(this.elements.target, cache.event, this) || '';\n\t}\n\n\t// Handle deferred content\n\tif($.isFunction(content.then)) {\n\t\tcache.waiting = TRUE;\n\t\treturn content.then(function(c) {\n\t\t\tcache.waiting = FALSE;\n\t\t\treturn self._update(c, element);\n\t\t}, NULL, function(e) {\n\t\t\treturn self._update(e, element);\n\t\t});\n\t}\n\n\t// If content is null... return false\n\tif(content === FALSE || !content && content !== '') { return FALSE; }\n\n\t// Append new content if its a DOM array and show it if hidden\n\tif(content.jquery && content.length > 0) {\n\t\telement.empty().append(\n\t\t\tcontent.css({ display: 'block', visibility: 'visible' })\n\t\t);\n\t}\n\n\t// Content is a regular string, insert the new content\n\telse { element.html(content); }\n\n\t// Wait for content to be loaded, and reposition\n\treturn this._waitForContent(element).then(function(images) {\n\t\tif(self.rendered && self.tooltip[0].offsetWidth > 0) {\n\t\t\tself.reposition(cache.event, !images.length);\n\t\t}\n\t});\n};\n\nPROTOTYPE._waitForContent = function(element) {\n\tvar cache = this.cache;\n\n\t// Set flag\n\tcache.waiting = TRUE;\n\n\t// If imagesLoaded is included, ensure images have loaded and return promise\n\treturn ( $.fn.imagesLoaded ? element.imagesLoaded() : new $.Deferred().resolve([]) )\n\t\t.done(function() { cache.waiting = FALSE; })\n\t\t.promise();\n};\n\nPROTOTYPE._updateContent = function(content, reposition) {\n\tthis._update(content, this.elements.content, reposition);\n};\n\nPROTOTYPE._updateTitle = function(content, reposition) {\n\tif(this._update(content, this.elements.title, reposition) === FALSE) {\n\t\tthis._removeTitle(FALSE);\n\t}\n};\n\nPROTOTYPE._createTitle = function()\n{\n\tvar elements = this.elements,\n\t\tid = this._id+'-title';\n\n\t// Destroy previous title element, if present\n\tif(elements.titlebar) { this._removeTitle(); }\n\n\t// Create title bar and title elements\n\telements.titlebar = $('<div />', {\n\t\t'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass('header') : '')\n\t})\n\t.append(\n\t\telements.title = $('<div />', {\n\t\t\t'id': id,\n\t\t\t'class': NAMESPACE + '-title',\n\t\t\t'aria-atomic': TRUE\n\t\t})\n\t)\n\t.insertBefore(elements.content)\n\n\t// Button-specific events\n\t.delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) {\n\t\t$(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down');\n\t})\n\t.delegate('.qtip-close', 'mouseover mouseout', function(event){\n\t\t$(this).toggleClass('ui-state-hover', event.type === 'mouseover');\n\t});\n\n\t// Create button if enabled\n\tif(this.options.content.button) { this._createButton(); }\n};\n\nPROTOTYPE._removeTitle = function(reposition)\n{\n\tvar elements = this.elements;\n\n\tif(elements.title) {\n\t\telements.titlebar.remove();\n\t\telements.titlebar = elements.title = elements.button = NULL;\n\n\t\t// Reposition if enabled\n\t\tif(reposition !== FALSE) { this.reposition(); }\n\t}\n};\n;PROTOTYPE._createPosClass = function(my) {\n\treturn NAMESPACE + '-pos-' + (my || this.options.position.my).abbrev();\n};\n\nPROTOTYPE.reposition = function(event, effect) {\n\tif(!this.rendered || this.positioning || this.destroyed) { return this; }\n\n\t// Set positioning flag\n\tthis.positioning = TRUE;\n\n\tvar cache = this.cache,\n\t\ttooltip = this.tooltip,\n\t\tposOptions = this.options.position,\n\t\ttarget = posOptions.target,\n\t\tmy = posOptions.my,\n\t\tat = posOptions.at,\n\t\tviewport = posOptions.viewport,\n\t\tcontainer = posOptions.container,\n\t\tadjust = posOptions.adjust,\n\t\tmethod = adjust.method.split(' '),\n\t\ttooltipWidth = tooltip.outerWidth(FALSE),\n\t\ttooltipHeight = tooltip.outerHeight(FALSE),\n\t\ttargetWidth = 0,\n\t\ttargetHeight = 0,\n\t\ttype = tooltip.css('position'),\n\t\tposition = { left: 0, top: 0 },\n\t\tvisible = tooltip[0].offsetWidth > 0,\n\t\tisScroll = event && event.type === 'scroll',\n\t\twin = $(window),\n\t\tdoc = container[0].ownerDocument,\n\t\tmouse = this.mouse,\n\t\tpluginCalculations, offset, adjusted, newClass;\n\n\t// Check if absolute position was passed\n\tif($.isArray(target) && target.length === 2) {\n\t\t// Force left top and set position\n\t\tat = { x: LEFT, y: TOP };\n\t\tposition = { left: target[0], top: target[1] };\n\t}\n\n\t// Check if mouse was the target\n\telse if(target === 'mouse') {\n\t\t// Force left top to allow flipping\n\t\tat = { x: LEFT, y: TOP };\n\n\t\t// Use the mouse origin that caused the show event, if distance hiding is enabled\n\t\tif((!adjust.mouse || this.options.hide.distance) && cache.origin && cache.origin.pageX) {\n\t\t\tevent =  cache.origin;\n\t\t}\n\n\t\t// Use cached event for resize/scroll events\n\t\telse if(!event || event && (event.type === 'resize' || event.type === 'scroll')) {\n\t\t\tevent = cache.event;\n\t\t}\n\n\t\t// Otherwise, use the cached mouse coordinates if available\n\t\telse if(mouse && mouse.pageX) {\n\t\t\tevent = mouse;\n\t\t}\n\n\t\t// Calculate body and container offset and take them into account below\n\t\tif(type !== 'static') { position = container.offset(); }\n\t\tif(doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth)) {\n\t\t\toffset = $(document.body).offset();\n\t\t}\n\n\t\t// Use event coordinates for position\n\t\tposition = {\n\t\t\tleft: event.pageX - position.left + (offset && offset.left || 0),\n\t\t\ttop: event.pageY - position.top + (offset && offset.top || 0)\n\t\t};\n\n\t\t// Scroll events are a pain, some browsers\n\t\tif(adjust.mouse && isScroll && mouse) {\n\t\t\tposition.left -= (mouse.scrollX || 0) - win.scrollLeft();\n\t\t\tposition.top -= (mouse.scrollY || 0) - win.scrollTop();\n\t\t}\n\t}\n\n\t// Target wasn't mouse or absolute...\n\telse {\n\t\t// Check if event targetting is being used\n\t\tif(target === 'event') {\n\t\t\tif(event && event.target && event.type !== 'scroll' && event.type !== 'resize') {\n\t\t\t\tcache.target = $(event.target);\n\t\t\t}\n\t\t\telse if(!event.target) {\n\t\t\t\tcache.target = this.elements.target;\n\t\t\t}\n\t\t}\n\t\telse if(target !== 'event'){\n\t\t\tcache.target = $(target.jquery ? target : this.elements.target);\n\t\t}\n\t\ttarget = cache.target;\n\n\t\t// Parse the target into a jQuery object and make sure there's an element present\n\t\ttarget = $(target).eq(0);\n\t\tif(target.length === 0) { return this; }\n\n\t\t// Check if window or document is the target\n\t\telse if(target[0] === document || target[0] === window) {\n\t\t\ttargetWidth = BROWSER.iOS ? window.innerWidth : target.width();\n\t\t\ttargetHeight = BROWSER.iOS ? window.innerHeight : target.height();\n\n\t\t\tif(target[0] === window) {\n\t\t\t\tposition = {\n\t\t\t\t\ttop: (viewport || target).scrollTop(),\n\t\t\t\t\tleft: (viewport || target).scrollLeft()\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Check if the target is an <AREA> element\n\t\telse if(PLUGINS.imagemap && target.is('area')) {\n\t\t\tpluginCalculations = PLUGINS.imagemap(this, target, at, PLUGINS.viewport ? method : FALSE);\n\t\t}\n\n\t\t// Check if the target is an SVG element\n\t\telse if(PLUGINS.svg && target && target[0].ownerSVGElement) {\n\t\t\tpluginCalculations = PLUGINS.svg(this, target, at, PLUGINS.viewport ? method : FALSE);\n\t\t}\n\n\t\t// Otherwise use regular jQuery methods\n\t\telse {\n\t\t\ttargetWidth = target.outerWidth(FALSE);\n\t\t\ttargetHeight = target.outerHeight(FALSE);\n\t\t\tposition = target.offset();\n\t\t}\n\n\t\t// Parse returned plugin values into proper variables\n\t\tif(pluginCalculations) {\n\t\t\ttargetWidth = pluginCalculations.width;\n\t\t\ttargetHeight = pluginCalculations.height;\n\t\t\toffset = pluginCalculations.offset;\n\t\t\tposition = pluginCalculations.position;\n\t\t}\n\n\t\t// Adjust position to take into account offset parents\n\t\tposition = this.reposition.offset(target, position, container);\n\n\t\t// Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2)\n\t\tif(BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1 ||\n\t\t\tBROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33 ||\n\t\t\t!BROWSER.iOS && type === 'fixed'\n\t\t){\n\t\t\tposition.left -= win.scrollLeft();\n\t\t\tposition.top -= win.scrollTop();\n\t\t}\n\n\t\t// Adjust position relative to target\n\t\tif(!pluginCalculations || pluginCalculations && pluginCalculations.adjustable !== FALSE) {\n\t\t\tposition.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0;\n\t\t\tposition.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0;\n\t\t}\n\t}\n\n\t// Adjust position relative to tooltip\n\tposition.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0);\n\tposition.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0);\n\n\t// Use viewport adjustment plugin if enabled\n\tif(PLUGINS.viewport) {\n\t\tadjusted = position.adjusted = PLUGINS.viewport(\n\t\t\tthis, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight\n\t\t);\n\n\t\t// Apply offsets supplied by positioning plugin (if used)\n\t\tif(offset && adjusted.left) { position.left += offset.left; }\n\t\tif(offset && adjusted.top) {  position.top += offset.top; }\n\n\t\t// Apply any new 'my' position\n\t\tif(adjusted.my) { this.position.my = adjusted.my; }\n\t}\n\n\t// Viewport adjustment is disabled, set values to zero\n\telse { position.adjusted = { left: 0, top: 0 }; }\n\n\t// Set tooltip position class if it's changed\n\tif(cache.posClass !== (newClass = this._createPosClass(this.position.my))) {\n\t\tcache.posClass = newClass;\n\t\ttooltip.removeClass(cache.posClass).addClass(newClass);\n\t}\n\n\t// tooltipmove event\n\tif(!this._trigger('move', [position, viewport.elem || viewport], event)) { return this; }\n\tdelete position.adjusted;\n\n\t// If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly\n\tif(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) {\n\t\ttooltip.css(position);\n\t}\n\n\t// Use custom function if provided\n\telse if($.isFunction(posOptions.effect)) {\n\t\tposOptions.effect.call(tooltip, this, $.extend({}, position));\n\t\ttooltip.queue(function(next) {\n\t\t\t// Reset attributes to avoid cross-browser rendering bugs\n\t\t\t$(this).css({ opacity: '', height: '' });\n\t\t\tif(BROWSER.ie) { this.style.removeAttribute('filter'); }\n\n\t\t\tnext();\n\t\t});\n\t}\n\n\t// Set positioning flag\n\tthis.positioning = FALSE;\n\n\treturn this;\n};\n\n// Custom (more correct for qTip!) offset calculator\nPROTOTYPE.reposition.offset = function(elem, pos, container) {\n\tif(!container[0]) { return pos; }\n\n\tvar ownerDocument = $(elem[0].ownerDocument),\n\t\tquirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat',\n\t\tparent = container[0],\n\t\tscrolled, position, parentOffset, overflow;\n\n\tfunction scroll(e, i) {\n\t\tpos.left += i * e.scrollLeft();\n\t\tpos.top += i * e.scrollTop();\n\t}\n\n\t// Compensate for non-static containers offset\n\tdo {\n\t\tif((position = $.css(parent, 'position')) !== 'static') {\n\t\t\tif(position === 'fixed') {\n\t\t\t\tparentOffset = parent.getBoundingClientRect();\n\t\t\t\tscroll(ownerDocument, -1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparentOffset = $(parent).position();\n\t\t\t\tparentOffset.left += parseFloat($.css(parent, 'borderLeftWidth')) || 0;\n\t\t\t\tparentOffset.top += parseFloat($.css(parent, 'borderTopWidth')) || 0;\n\t\t\t}\n\n\t\t\tpos.left -= parentOffset.left + (parseFloat($.css(parent, 'marginLeft')) || 0);\n\t\t\tpos.top -= parentOffset.top + (parseFloat($.css(parent, 'marginTop')) || 0);\n\n\t\t\t// If this is the first parent element with an overflow of \"scroll\" or \"auto\", store it\n\t\t\tif(!scrolled && (overflow = $.css(parent, 'overflow')) !== 'hidden' && overflow !== 'visible' && $.prop(parent, 'tagName') !== 'BODY') { scrolled = $(parent); }\n\t\t}\n\t}\n\twhile(parent = parent.offsetParent);\n\n\t// Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode)\n\tif(scrolled && (scrolled[0] !== ownerDocument[0] || quirks)) {\n\t\tscroll(scrolled, 1);\n\t}\n\n\treturn pos;\n};\n\n// Corner class\nvar C = (CORNER = PROTOTYPE.reposition.Corner = function(corner, forceY) {\n\tcorner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase();\n\tthis.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase();\n\tthis.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase();\n\tthis.forceY = !!forceY;\n\n\tvar f = corner.charAt(0);\n\tthis.precedance = f === 't' || f === 'b' ? Y : X;\n}).prototype;\n\nC.invert = function(z, center) {\n\tthis[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z];\n};\n\nC.string = function(join) {\n\tvar x = this.x, y = this.y;\n\n\tvar result = x !== y ?\n\t\tx === 'center' || y !== 'center' && (this.precedance === Y || this.forceY) ? \n\t\t\t[y,x] : \n\t\t\t[x,y] :\n\t\t[x];\n\n\treturn join !== false ? result.join(' ') : result;\n};\n\nC.abbrev = function() {\n\tvar result = this.string(false);\n\treturn result[0].charAt(0) + (result[1] && result[1].charAt(0) || '');\n};\n\nC.clone = function() {\n\treturn new CORNER( this.string(), this.forceY );\n};\n\n;\nPROTOTYPE.toggle = function(state, event) {\n\tvar cache = this.cache,\n\t\toptions = this.options,\n\t\ttooltip = this.tooltip;\n\n\t// Try to prevent flickering when tooltip overlaps show element\n\tif(event) {\n\t\tif((/over|enter/).test(event.type) && cache.event && (/out|leave/).test(cache.event.type) &&\n\t\t\toptions.show.target.add(event.target).length === options.show.target.length &&\n\t\t\ttooltip.has(event.relatedTarget).length) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Cache event\n\t\tcache.event = $.event.fix(event);\n\t}\n\n\t// If we're currently waiting and we've just hidden... stop it\n\tthis.waiting && !state && (this.hiddenDuringWait = TRUE);\n\n\t// Render the tooltip if showing and it isn't already\n\tif(!this.rendered) { return state ? this.render(1) : this; }\n\telse if(this.destroyed || this.disabled) { return this; }\n\n\tvar type = state ? 'show' : 'hide',\n\t\topts = this.options[type],\n\t\tposOptions = this.options.position,\n\t\tcontentOptions = this.options.content,\n\t\twidth = this.tooltip.css('width'),\n\t\tvisible = this.tooltip.is(':visible'),\n\t\tanimate = state || opts.target.length === 1,\n\t\tsameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target,\n\t\tidenticalState, allow, after;\n\n\t// Detect state if valid one isn't provided\n\tif((typeof state).search('boolean|number')) { state = !visible; }\n\n\t// Check if the tooltip is in an identical state to the new would-be state\n\tidenticalState = !tooltip.is(':animated') && visible === state && sameTarget;\n\n\t// Fire tooltip(show/hide) event and check if destroyed\n\tallow = !identicalState ? !!this._trigger(type, [90]) : NULL;\n\n\t// Check to make sure the tooltip wasn't destroyed in the callback\n\tif(this.destroyed) { return this; }\n\n\t// If the user didn't stop the method prematurely and we're showing the tooltip, focus it\n\tif(allow !== FALSE && state) { this.focus(event); }\n\n\t// If the state hasn't changed or the user stopped it, return early\n\tif(!allow || identicalState) { return this; }\n\n\t// Set ARIA hidden attribute\n\t$.attr(tooltip[0], 'aria-hidden', !!!state);\n\n\t// Execute state specific properties\n\tif(state) {\n\t\t// Store show origin coordinates\n\t\tthis.mouse && (cache.origin = $.event.fix(this.mouse));\n\n\t\t// Update tooltip content & title if it's a dynamic function\n\t\tif($.isFunction(contentOptions.text)) { this._updateContent(contentOptions.text, FALSE); }\n\t\tif($.isFunction(contentOptions.title)) { this._updateTitle(contentOptions.title, FALSE); }\n\n\t\t// Cache mousemove events for positioning purposes (if not already tracking)\n\t\tif(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) {\n\t\t\t$(document).bind('mousemove.'+NAMESPACE, this._storeMouse);\n\t\t\ttrackingBound = TRUE;\n\t\t}\n\n\t\t// Update the tooltip position (set width first to prevent viewport/max-width issues)\n\t\tif(!width) { tooltip.css('width', tooltip.outerWidth(FALSE)); }\n\t\tthis.reposition(event, arguments[2]);\n\t\tif(!width) { tooltip.css('width', ''); }\n\n\t\t// Hide other tooltips if tooltip is solo\n\t\tif(!!opts.solo) {\n\t\t\t(typeof opts.solo === 'string' ? $(opts.solo) : $(SELECTOR, opts.solo))\n\t\t\t\t.not(tooltip).not(opts.target).qtip('hide', new $.Event('tooltipsolo'));\n\t\t}\n\t}\n\telse {\n\t\t// Clear show timer if we're hiding\n\t\tclearTimeout(this.timers.show);\n\n\t\t// Remove cached origin on hide\n\t\tdelete cache.origin;\n\n\t\t// Remove mouse tracking event if not needed (all tracking qTips are hidden)\n\t\tif(trackingBound && !$(SELECTOR+'[tracking=\"true\"]:visible', opts.solo).not(tooltip).length) {\n\t\t\t$(document).unbind('mousemove.'+NAMESPACE);\n\t\t\ttrackingBound = FALSE;\n\t\t}\n\n\t\t// Blur the tooltip\n\t\tthis.blur(event);\n\t}\n\n\t// Define post-animation, state specific properties\n\tafter = $.proxy(function() {\n\t\tif(state) {\n\t\t\t// Prevent antialias from disappearing in IE by removing filter\n\t\t\tif(BROWSER.ie) { tooltip[0].style.removeAttribute('filter'); }\n\n\t\t\t// Remove overflow setting to prevent tip bugs\n\t\t\ttooltip.css('overflow', '');\n\n\t\t\t// Autofocus elements if enabled\n\t\t\tif('string' === typeof opts.autofocus) {\n\t\t\t\t$(this.options.show.autofocus, tooltip).focus();\n\t\t\t}\n\n\t\t\t// If set, hide tooltip when inactive for delay period\n\t\t\tthis.options.show.target.trigger('qtip-'+this.id+'-inactive');\n\t\t}\n\t\telse {\n\t\t\t// Reset CSS states\n\t\t\ttooltip.css({\n\t\t\t\tdisplay: '',\n\t\t\t\tvisibility: '',\n\t\t\t\topacity: '',\n\t\t\t\tleft: '',\n\t\t\t\ttop: ''\n\t\t\t});\n\t\t}\n\n\t\t// tooltipvisible/tooltiphidden events\n\t\tthis._trigger(state ? 'visible' : 'hidden');\n\t}, this);\n\n\t// If no effect type is supplied, use a simple toggle\n\tif(opts.effect === FALSE || animate === FALSE) {\n\t\ttooltip[ type ]();\n\t\tafter();\n\t}\n\n\t// Use custom function if provided\n\telse if($.isFunction(opts.effect)) {\n\t\ttooltip.stop(1, 1);\n\t\topts.effect.call(tooltip, this);\n\t\ttooltip.queue('fx', function(n) {\n\t\t\tafter(); n();\n\t\t});\n\t}\n\n\t// Use basic fade function by default\n\telse { tooltip.fadeTo(90, state ? 1 : 0, after); }\n\n\t// If inactive hide method is set, active it\n\tif(state) { opts.target.trigger('qtip-'+this.id+'-inactive'); }\n\n\treturn this;\n};\n\nPROTOTYPE.show = function(event) { return this.toggle(TRUE, event); };\n\nPROTOTYPE.hide = function(event) { return this.toggle(FALSE, event); };\n;PROTOTYPE.focus = function(event) {\n\tif(!this.rendered || this.destroyed) { return this; }\n\n\tvar qtips = $(SELECTOR),\n\t\ttooltip = this.tooltip,\n\t\tcurIndex = parseInt(tooltip[0].style.zIndex, 10),\n\t\tnewIndex = QTIP.zindex + qtips.length;\n\n\t// Only update the z-index if it has changed and tooltip is not already focused\n\tif(!tooltip.hasClass(CLASS_FOCUS)) {\n\t\t// tooltipfocus event\n\t\tif(this._trigger('focus', [newIndex], event)) {\n\t\t\t// Only update z-index's if they've changed\n\t\t\tif(curIndex !== newIndex) {\n\t\t\t\t// Reduce our z-index's and keep them properly ordered\n\t\t\t\tqtips.each(function() {\n\t\t\t\t\tif(this.style.zIndex > curIndex) {\n\t\t\t\t\t\tthis.style.zIndex = this.style.zIndex - 1;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Fire blur event for focused tooltip\n\t\t\t\tqtips.filter('.' + CLASS_FOCUS).qtip('blur', event);\n\t\t\t}\n\n\t\t\t// Set the new z-index\n\t\t\ttooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;\n\t\t}\n\t}\n\n\treturn this;\n};\n\nPROTOTYPE.blur = function(event) {\n\tif(!this.rendered || this.destroyed) { return this; }\n\n\t// Set focused status to FALSE\n\tthis.tooltip.removeClass(CLASS_FOCUS);\n\n\t// tooltipblur event\n\tthis._trigger('blur', [ this.tooltip.css('zIndex') ], event);\n\n\treturn this;\n};\n;PROTOTYPE.disable = function(state) {\n\tif(this.destroyed) { return this; }\n\n\t// If 'toggle' is passed, toggle the current state\n\tif(state === 'toggle') {\n\t\tstate = !(this.rendered ? this.tooltip.hasClass(CLASS_DISABLED) : this.disabled);\n\t}\n\n\t// Disable if no state passed\n\telse if('boolean' !== typeof state) {\n\t\tstate = TRUE;\n\t}\n\n\tif(this.rendered) {\n\t\tthis.tooltip.toggleClass(CLASS_DISABLED, state)\n\t\t\t.attr('aria-disabled', state);\n\t}\n\n\tthis.disabled = !!state;\n\n\treturn this;\n};\n\nPROTOTYPE.enable = function() { return this.disable(FALSE); };\n;PROTOTYPE._createButton = function()\n{\n\tvar self = this,\n\t\telements = this.elements,\n\t\ttooltip = elements.tooltip,\n\t\tbutton = this.options.content.button,\n\t\tisString = typeof button === 'string',\n\t\tclose = isString ? button : 'Close tooltip';\n\n\tif(elements.button) { elements.button.remove(); }\n\n\t// Use custom button if one was supplied by user, else use default\n\tif(button.jquery) {\n\t\telements.button = button;\n\t}\n\telse {\n\t\telements.button = $('<a />', {\n\t\t\t'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE+'-icon'),\n\t\t\t'title': close,\n\t\t\t'aria-label': close\n\t\t})\n\t\t.prepend(\n\t\t\t$('<span />', {\n\t\t\t\t'class': 'ui-icon ui-icon-close',\n\t\t\t\t'html': '&times;'\n\t\t\t})\n\t\t);\n\t}\n\n\t// Create button and setup attributes\n\telements.button.appendTo(elements.titlebar || tooltip)\n\t\t.attr('role', 'button')\n\t\t.click(function(event) {\n\t\t\tif(!tooltip.hasClass(CLASS_DISABLED)) { self.hide(event); }\n\t\t\treturn FALSE;\n\t\t});\n};\n\nPROTOTYPE._updateButton = function(button)\n{\n\t// Make sure tooltip is rendered and if not, return\n\tif(!this.rendered) { return FALSE; }\n\n\tvar elem = this.elements.button;\n\tif(button) { this._createButton(); }\n\telse { elem.remove(); }\n};\n;// Widget class creator\nfunction createWidgetClass(cls) {\n\treturn WIDGET.concat('').join(cls ? '-'+cls+' ' : ' ');\n}\n\n// Widget class setter method\nPROTOTYPE._setWidget = function()\n{\n\tvar on = this.options.style.widget,\n\t\telements = this.elements,\n\t\ttooltip = elements.tooltip,\n\t\tdisabled = tooltip.hasClass(CLASS_DISABLED);\n\n\ttooltip.removeClass(CLASS_DISABLED);\n\tCLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled';\n\ttooltip.toggleClass(CLASS_DISABLED, disabled);\n\n\ttooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(CLASS_DEFAULT, this.options.style.def && !on);\n\n\tif(elements.content) {\n\t\telements.content.toggleClass( createWidgetClass('content'), on);\n\t}\n\tif(elements.titlebar) {\n\t\telements.titlebar.toggleClass( createWidgetClass('header'), on);\n\t}\n\tif(elements.button) {\n\t\telements.button.toggleClass(NAMESPACE+'-icon', !on);\n\t}\n};\n;function delay(callback, duration) {\n\t// If tooltip has displayed, start hide timer\n\tif(duration > 0) {\n\t\treturn setTimeout(\n\t\t\t$.proxy(callback, this), duration\n\t\t);\n\t}\n\telse{ callback.call(this); }\n}\n\nfunction showMethod(event) {\n\tif(this.tooltip.hasClass(CLASS_DISABLED)) { return; }\n\n\t// Clear hide timers\n\tclearTimeout(this.timers.show);\n\tclearTimeout(this.timers.hide);\n\n\t// Start show timer\n\tthis.timers.show = delay.call(this,\n\t\tfunction() { this.toggle(TRUE, event); },\n\t\tthis.options.show.delay\n\t);\n}\n\nfunction hideMethod(event) {\n\tif(this.tooltip.hasClass(CLASS_DISABLED) || this.destroyed) { return; }\n\n\t// Check if new target was actually the tooltip element\n\tvar relatedTarget = $(event.relatedTarget),\n\t\tontoTooltip = relatedTarget.closest(SELECTOR)[0] === this.tooltip[0],\n\t\tontoTarget = relatedTarget[0] === this.options.show.target[0];\n\n\t// Clear timers and stop animation queue\n\tclearTimeout(this.timers.show);\n\tclearTimeout(this.timers.hide);\n\n\t// Prevent hiding if tooltip is fixed and event target is the tooltip.\n\t// Or if mouse positioning is enabled and cursor momentarily overlaps\n\tif(this !== relatedTarget[0] &&\n\t\t(this.options.position.target === 'mouse' && ontoTooltip) ||\n\t\tthis.options.hide.fixed && (\n\t\t\t(/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget))\n\t\t)\n\t{\n\t\t/* eslint-disable no-empty */\n\t\ttry {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopImmediatePropagation();\n\t\t} catch(e) {}\n\t\t/* eslint-enable no-empty */\n\n\t\treturn;\n\t}\n\n\t// If tooltip has displayed, start hide timer\n\tthis.timers.hide = delay.call(this,\n\t\tfunction() { this.toggle(FALSE, event); },\n\t\tthis.options.hide.delay,\n\t\tthis\n\t);\n}\n\nfunction inactiveMethod(event) {\n\tif(this.tooltip.hasClass(CLASS_DISABLED) || !this.options.hide.inactive) { return; }\n\n\t// Clear timer\n\tclearTimeout(this.timers.inactive);\n\n\tthis.timers.inactive = delay.call(this,\n\t\tfunction(){ this.hide(event); },\n\t\tthis.options.hide.inactive\n\t);\n}\n\nfunction repositionMethod(event) {\n\tif(this.rendered && this.tooltip[0].offsetWidth > 0) { this.reposition(event); }\n}\n\n// Store mouse coordinates\nPROTOTYPE._storeMouse = function(event) {\n\t(this.mouse = $.event.fix(event)).type = 'mousemove';\n\treturn this;\n};\n\n// Bind events\nPROTOTYPE._bind = function(targets, events, method, suffix, context) {\n\tif(!targets || !method || !events.length) { return; }\n\tvar ns = '.' + this._id + (suffix ? '-'+suffix : '');\n\t$(targets).bind(\n\t\t(events.split ? events : events.join(ns + ' ')) + ns,\n\t\t$.proxy(method, context || this)\n\t);\n\treturn this;\n};\nPROTOTYPE._unbind = function(targets, suffix) {\n\ttargets && $(targets).unbind('.' + this._id + (suffix ? '-'+suffix : ''));\n\treturn this;\n};\n\n// Global delegation helper\nfunction delegate(selector, events, method) {\n\t$(document.body).delegate(selector,\n\t\t(events.split ? events : events.join('.'+NAMESPACE + ' ')) + '.'+NAMESPACE,\n\t\tfunction() {\n\t\t\tvar api = QTIP.api[ $.attr(this, ATTR_ID) ];\n\t\t\tapi && !api.disabled && method.apply(api, arguments);\n\t\t}\n\t);\n}\n// Event trigger\nPROTOTYPE._trigger = function(type, args, event) {\n\tvar callback = new $.Event('tooltip'+type);\n\tcallback.originalEvent = event && $.extend({}, event) || this.cache.event || NULL;\n\n\tthis.triggering = type;\n\tthis.tooltip.trigger(callback, [this].concat(args || []));\n\tthis.triggering = FALSE;\n\n\treturn !callback.isDefaultPrevented();\n};\n\nPROTOTYPE._bindEvents = function(showEvents, hideEvents, showTargets, hideTargets, showCallback, hideCallback) {\n\t// Get tasrgets that lye within both\n\tvar similarTargets = showTargets.filter( hideTargets ).add( hideTargets.filter(showTargets) ),\n\t\ttoggleEvents = [];\n\n\t// If hide and show targets are the same...\n\tif(similarTargets.length) {\n\n\t\t// Filter identical show/hide events\n\t\t$.each(hideEvents, function(i, type) {\n\t\t\tvar showIndex = $.inArray(type, showEvents);\n\n\t\t\t// Both events are identical, remove from both hide and show events\n\t\t\t// and append to toggleEvents\n\t\t\tshowIndex > -1 && toggleEvents.push( showEvents.splice( showIndex, 1 )[0] );\n\t\t});\n\n\t\t// Toggle events are special case of identical show/hide events, which happen in sequence\n\t\tif(toggleEvents.length) {\n\t\t\t// Bind toggle events to the similar targets\n\t\t\tthis._bind(similarTargets, toggleEvents, function(event) {\n\t\t\t\tvar state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false;\n\t\t\t\t(state ? hideCallback : showCallback).call(this, event);\n\t\t\t});\n\n\t\t\t// Remove the similar targets from the regular show/hide bindings\n\t\t\tshowTargets = showTargets.not(similarTargets);\n\t\t\thideTargets = hideTargets.not(similarTargets);\n\t\t}\n\t}\n\n\t// Apply show/hide/toggle events\n\tthis._bind(showTargets, showEvents, showCallback);\n\tthis._bind(hideTargets, hideEvents, hideCallback);\n};\n\nPROTOTYPE._assignInitialEvents = function(event) {\n\tvar options = this.options,\n\t\tshowTarget = options.show.target,\n\t\thideTarget = options.hide.target,\n\t\tshowEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],\n\t\thideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];\n\n\t// Catch remove/removeqtip events on target element to destroy redundant tooltips\n\tthis._bind(this.elements.target, ['remove', 'removeqtip'], function() {\n\t\tthis.destroy(true);\n\t}, 'destroy');\n\n\t/*\n\t * Make sure hoverIntent functions properly by using mouseleave as a hide event if\n\t * mouseenter/mouseout is used for show.event, even if it isn't in the users options.\n\t */\n\tif(/mouse(over|enter)/i.test(options.show.event) && !/mouse(out|leave)/i.test(options.hide.event)) {\n\t\thideEvents.push('mouseleave');\n\t}\n\n\t/*\n\t * Also make sure initial mouse targetting works correctly by caching mousemove coords\n\t * on show targets before the tooltip has rendered. Also set onTarget when triggered to\n\t * keep mouse tracking working.\n\t */\n\tthis._bind(showTarget, 'mousemove', function(moveEvent) {\n\t\tthis._storeMouse(moveEvent);\n\t\tthis.cache.onTarget = TRUE;\n\t});\n\n\t// Define hoverIntent function\n\tfunction hoverIntent(hoverEvent) {\n\t\t// Only continue if tooltip isn't disabled\n\t\tif(this.disabled || this.destroyed) { return FALSE; }\n\n\t\t// Cache the event data\n\t\tthis.cache.event = hoverEvent && $.event.fix(hoverEvent);\n\t\tthis.cache.target = hoverEvent && $(hoverEvent.target);\n\n\t\t// Start the event sequence\n\t\tclearTimeout(this.timers.show);\n\t\tthis.timers.show = delay.call(this,\n\t\t\tfunction() { this.render(typeof hoverEvent === 'object' || options.show.ready); },\n\t\t\toptions.prerender ? 0 : options.show.delay\n\t\t);\n\t}\n\n\t// Filter and bind events\n\tthis._bindEvents(showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() {\n\t\tif(!this.timers) { return FALSE; }\n\t\tclearTimeout(this.timers.show);\n\t});\n\n\t// Prerendering is enabled, create tooltip now\n\tif(options.show.ready || options.prerender) { hoverIntent.call(this, event); }\n};\n\n// Event assignment method\nPROTOTYPE._assignEvents = function() {\n\tvar self = this,\n\t\toptions = this.options,\n\t\tposOptions = options.position,\n\n\t\ttooltip = this.tooltip,\n\t\tshowTarget = options.show.target,\n\t\thideTarget = options.hide.target,\n\t\tcontainerTarget = posOptions.container,\n\t\tviewportTarget = posOptions.viewport,\n\t\tdocumentTarget = $(document),\n\t\twindowTarget = $(window),\n\n\t\tshowEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [],\n\t\thideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : [];\n\n\n\t// Assign passed event callbacks\n\t$.each(options.events, function(name, callback) {\n\t\tself._bind(tooltip, name === 'toggle' ? ['tooltipshow','tooltiphide'] : ['tooltip'+name], callback, null, tooltip);\n\t});\n\n\t// Hide tooltips when leaving current window/frame (but not select/option elements)\n\tif(/mouse(out|leave)/i.test(options.hide.event) && options.hide.leave === 'window') {\n\t\tthis._bind(documentTarget, ['mouseout', 'blur'], function(event) {\n\t\t\tif(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Enable hide.fixed by adding appropriate class\n\tif(options.hide.fixed) {\n\t\thideTarget = hideTarget.add( tooltip.addClass(CLASS_FIXED) );\n\t}\n\n\t/*\n\t * Make sure hoverIntent functions properly by using mouseleave to clear show timer if\n\t * mouseenter/mouseout is used for show.event, even if it isn't in the users options.\n\t */\n\telse if(/mouse(over|enter)/i.test(options.show.event)) {\n\t\tthis._bind(hideTarget, 'mouseleave', function() {\n\t\t\tclearTimeout(this.timers.show);\n\t\t});\n\t}\n\n\t// Hide tooltip on document mousedown if unfocus events are enabled\n\tif(('' + options.hide.event).indexOf('unfocus') > -1) {\n\t\tthis._bind(containerTarget.closest('html'), ['mousedown', 'touchstart'], function(event) {\n\t\t\tvar elem = $(event.target),\n\t\t\t\tenabled = this.rendered && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0,\n\t\t\t\tisAncestor = elem.parents(SELECTOR).filter(this.tooltip[0]).length > 0;\n\n\t\t\tif(elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor &&\n\t\t\t\t!this.target.has(elem[0]).length && enabled\n\t\t\t) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Check if the tooltip hides when inactive\n\tif('number' === typeof options.hide.inactive) {\n\t\t// Bind inactive method to show target(s) as a custom event\n\t\tthis._bind(showTarget, 'qtip-'+this.id+'-inactive', inactiveMethod, 'inactive');\n\n\t\t// Define events which reset the 'inactive' event handler\n\t\tthis._bind(hideTarget.add(tooltip), QTIP.inactiveEvents, inactiveMethod);\n\t}\n\n\t// Filter and bind events\n\tthis._bindEvents(showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod);\n\n\t// Mouse movement bindings\n\tthis._bind(showTarget.add(tooltip), 'mousemove', function(event) {\n\t\t// Check if the tooltip hides when mouse is moved a certain distance\n\t\tif('number' === typeof options.hide.distance) {\n\t\t\tvar origin = this.cache.origin || {},\n\t\t\t\tlimit = this.options.hide.distance,\n\t\t\t\tabs = Math.abs;\n\n\t\t\t// Check if the movement has gone beyond the limit, and hide it if so\n\t\t\tif(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t}\n\n\t\t// Cache mousemove coords on show targets\n\t\tthis._storeMouse(event);\n\t});\n\n\t// Mouse positioning events\n\tif(posOptions.target === 'mouse') {\n\t\t// If mouse adjustment is on...\n\t\tif(posOptions.adjust.mouse) {\n\t\t\t// Apply a mouseleave event so we don't get problems with overlapping\n\t\t\tif(options.hide.event) {\n\t\t\t\t// Track if we're on the target or not\n\t\t\t\tthis._bind(showTarget, ['mouseenter', 'mouseleave'], function(event) {\n\t\t\t\t\tif(!this.cache) {return FALSE; }\n\t\t\t\t\tthis.cache.onTarget = event.type === 'mouseenter';\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Update tooltip position on mousemove\n\t\t\tthis._bind(documentTarget, 'mousemove', function(event) {\n\t\t\t\t// Update the tooltip position only if the tooltip is visible and adjustment is enabled\n\t\t\t\tif(this.rendered && this.cache.onTarget && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0) {\n\t\t\t\t\tthis.reposition(event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t// Adjust positions of the tooltip on window resize if enabled\n\tif(posOptions.adjust.resize || viewportTarget.length) {\n\t\tthis._bind( $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod );\n\t}\n\n\t// Adjust tooltip position on scroll of the window or viewport element if present\n\tif(posOptions.adjust.scroll) {\n\t\tthis._bind( windowTarget.add(posOptions.container), 'scroll', repositionMethod );\n\t}\n};\n\n// Un-assignment method\nPROTOTYPE._unassignEvents = function() {\n\tvar options = this.options,\n\t\tshowTargets = options.show.target,\n\t\thideTargets = options.hide.target,\n\t\ttargets = $.grep([\n\t\t\tthis.elements.target[0],\n\t\t\tthis.rendered && this.tooltip[0],\n\t\t\toptions.position.container[0],\n\t\t\toptions.position.viewport[0],\n\t\t\toptions.position.container.closest('html')[0], // unfocus\n\t\t\twindow,\n\t\t\tdocument\n\t\t], function(i) {\n\t\t\treturn typeof i === 'object';\n\t\t});\n\n\t// Add show and hide targets if they're valid\n\tif(showTargets && showTargets.toArray) {\n\t\ttargets = targets.concat(showTargets.toArray());\n\t}\n\tif(hideTargets && hideTargets.toArray) {\n\t\ttargets = targets.concat(hideTargets.toArray());\n\t}\n\n\t// Unbind the events\n\tthis._unbind(targets)\n\t\t._unbind(targets, 'destroy')\n\t\t._unbind(targets, 'inactive');\n};\n\n// Apply common event handlers using delegate (avoids excessive .bind calls!)\n$(function() {\n\tdelegate(SELECTOR, ['mouseenter', 'mouseleave'], function(event) {\n\t\tvar state = event.type === 'mouseenter',\n\t\t\ttooltip = $(event.currentTarget),\n\t\t\ttarget = $(event.relatedTarget || event.target),\n\t\t\toptions = this.options;\n\n\t\t// On mouseenter...\n\t\tif(state) {\n\t\t\t// Focus the tooltip on mouseenter (z-index stacking)\n\t\t\tthis.focus(event);\n\n\t\t\t// Clear hide timer on tooltip hover to prevent it from closing\n\t\t\ttooltip.hasClass(CLASS_FIXED) && !tooltip.hasClass(CLASS_DISABLED) && clearTimeout(this.timers.hide);\n\t\t}\n\n\t\t// On mouseleave...\n\t\telse {\n\t\t\t// When mouse tracking is enabled, hide when we leave the tooltip and not onto the show target (if a hide event is set)\n\t\t\tif(options.position.target === 'mouse' && options.position.adjust.mouse &&\n\t\t\t\toptions.hide.event && options.show.target && !target.closest(options.show.target[0]).length) {\n\t\t\t\tthis.hide(event);\n\t\t\t}\n\t\t}\n\n\t\t// Add hover class\n\t\ttooltip.toggleClass(CLASS_HOVER, state);\n\t});\n\n\t// Define events which reset the 'inactive' event handler\n\tdelegate('['+ATTR_ID+']', INACTIVE_EVENTS, inactiveMethod);\n});\n;// Initialization method\nfunction init(elem, id, opts) {\n\tvar obj, posOptions, attr, config, title,\n\n\t// Setup element references\n\tdocBody = $(document.body),\n\n\t// Use document body instead of document element if needed\n\tnewTarget = elem[0] === document ? docBody : elem,\n\n\t// Grab metadata from element if plugin is present\n\tmetadata = elem.metadata ? elem.metadata(opts.metadata) : NULL,\n\n\t// If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise\n\tmetadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL,\n\n\t// Grab data from metadata.name (or data-qtipopts as fallback) using .data() method,\n\thtml5 = elem.data(opts.metadata.name || 'qtipopts');\n\n\t// If we don't get an object returned attempt to parse it manualyl without parseJSON\n\t/* eslint-disable no-empty */\n\ttry { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; }\n\tcatch(e) {}\n\t/* eslint-enable no-empty */\n\n\t// Merge in and sanitize metadata\n\tconfig = $.extend(TRUE, {}, QTIP.defaults, opts,\n\t\ttypeof html5 === 'object' ? sanitizeOptions(html5) : NULL,\n\t\tsanitizeOptions(metadata5 || metadata));\n\n\t// Re-grab our positioning options now we've merged our metadata and set id to passed value\n\tposOptions = config.position;\n\tconfig.id = id;\n\n\t// Setup missing content if none is detected\n\tif('boolean' === typeof config.content.text) {\n\t\tattr = elem.attr(config.content.attr);\n\n\t\t// Grab from supplied attribute if available\n\t\tif(config.content.attr !== FALSE && attr) { config.content.text = attr; }\n\n\t\t// No valid content was found, abort render\n\t\telse { return FALSE; }\n\t}\n\n\t// Setup target options\n\tif(!posOptions.container.length) { posOptions.container = docBody; }\n\tif(posOptions.target === FALSE) { posOptions.target = newTarget; }\n\tif(config.show.target === FALSE) { config.show.target = newTarget; }\n\tif(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); }\n\tif(config.hide.target === FALSE) { config.hide.target = newTarget; }\n\tif(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; }\n\n\t// Ensure we only use a single container\n\tposOptions.container = posOptions.container.eq(0);\n\n\t// Convert position corner values into x and y strings\n\tposOptions.at = new CORNER(posOptions.at, TRUE);\n\tposOptions.my = new CORNER(posOptions.my);\n\n\t// Destroy previous tooltip if overwrite is enabled, or skip element if not\n\tif(elem.data(NAMESPACE)) {\n\t\tif(config.overwrite) {\n\t\t\telem.qtip('destroy', true);\n\t\t}\n\t\telse if(config.overwrite === FALSE) {\n\t\t\treturn FALSE;\n\t\t}\n\t}\n\n\t// Add has-qtip attribute\n\telem.attr(ATTR_HAS, id);\n\n\t// Remove title attribute and store it if present\n\tif(config.suppress && (title = elem.attr('title'))) {\n\t\t// Final attr call fixes event delegation and IE default tooltip showing problem\n\t\telem.removeAttr('title').attr(oldtitle, title).attr('title', '');\n\t}\n\n\t// Initialize the tooltip and add API reference\n\tobj = new QTip(elem, config, id, !!attr);\n\telem.data(NAMESPACE, obj);\n\n\treturn obj;\n}\n\n// jQuery $.fn extension method\nQTIP = $.fn.qtip = function(options, notation, newValue)\n{\n\tvar command = ('' + options).toLowerCase(), // Parse command\n\t\treturned = NULL,\n\t\targs = $.makeArray(arguments).slice(1),\n\t\tevent = args[args.length - 1],\n\t\topts = this[0] ? $.data(this[0], NAMESPACE) : NULL;\n\n\t// Check for API request\n\tif(!arguments.length && opts || command === 'api') {\n\t\treturn opts;\n\t}\n\n\t// Execute API command if present\n\telse if('string' === typeof options) {\n\t\tthis.each(function() {\n\t\t\tvar api = $.data(this, NAMESPACE);\n\t\t\tif(!api) { return TRUE; }\n\n\t\t\t// Cache the event if possible\n\t\t\tif(event && event.timeStamp) { api.cache.event = event; }\n\n\t\t\t// Check for specific API commands\n\t\t\tif(notation && (command === 'option' || command === 'options')) {\n\t\t\t\tif(newValue !== undefined || $.isPlainObject(notation)) {\n\t\t\t\t\tapi.set(notation, newValue);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturned = api.get(notation);\n\t\t\t\t\treturn FALSE;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Execute API command\n\t\t\telse if(api[command]) {\n\t\t\t\tapi[command].apply(api, args);\n\t\t\t}\n\t\t});\n\n\t\treturn returned !== NULL ? returned : this;\n\t}\n\n\t// No API commands. validate provided options and setup qTips\n\telse if('object' === typeof options || !arguments.length) {\n\t\t// Sanitize options first\n\t\topts = sanitizeOptions($.extend(TRUE, {}, options));\n\n\t\treturn this.each(function(i) {\n\t\t\tvar api, id;\n\n\t\t\t// Find next available ID, or use custom ID if provided\n\t\t\tid = $.isArray(opts.id) ? opts.id[i] : opts.id;\n\t\t\tid = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id;\n\n\t\t\t// Initialize the qTip and re-grab newly sanitized options\n\t\t\tapi = init($(this), id, opts);\n\t\t\tif(api === FALSE) { return TRUE; }\n\t\t\telse { QTIP.api[id] = api; }\n\n\t\t\t// Initialize plugins\n\t\t\t$.each(PLUGINS, function() {\n\t\t\t\tif(this.initialize === 'initialize') { this(api); }\n\t\t\t});\n\n\t\t\t// Assign initial pre-render events\n\t\t\tapi._assignInitialEvents(event);\n\t\t});\n\t}\n};\n\n// Expose class\n$.qtip = QTip;\n\n// Populated in render method\nQTIP.api = {};\n;$.each({\n\t/* Allow other plugins to successfully retrieve the title of an element with a qTip applied */\n\tattr: function(attr, val) {\n\t\tif(this.length) {\n\t\t\tvar self = this[0],\n\t\t\t\ttitle = 'title',\n\t\t\t\tapi = $.data(self, 'qtip');\n\n\t\t\tif(attr === title && api && api.options && 'object' === typeof api && 'object' === typeof api.options && api.options.suppress) {\n\t\t\t\tif(arguments.length < 2) {\n\t\t\t\t\treturn $.attr(self, oldtitle);\n\t\t\t\t}\n\n\t\t\t\t// If qTip is rendered and title was originally used as content, update it\n\t\t\t\tif(api && api.options.content.attr === title && api.cache.attr) {\n\t\t\t\t\tapi.set('content.text', val);\n\t\t\t\t}\n\n\t\t\t\t// Use the regular attr method to set, then cache the result\n\t\t\t\treturn this.attr(oldtitle, val);\n\t\t\t}\n\t\t}\n\n\t\treturn $.fn['attr'+replaceSuffix].apply(this, arguments);\n\t},\n\n\t/* Allow clone to correctly retrieve cached title attributes */\n\tclone: function(keepData) {\n\t\t// Clone our element using the real clone method\n\t\tvar elems = $.fn['clone'+replaceSuffix].apply(this, arguments);\n\n\t\t// Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false\n\t\tif(!keepData) {\n\t\t\telems.filter('['+oldtitle+']').attr('title', function() {\n\t\t\t\treturn $.attr(this, oldtitle);\n\t\t\t})\n\t\t\t.removeAttr(oldtitle);\n\t\t}\n\n\t\treturn elems;\n\t}\n}, function(name, func) {\n\tif(!func || $.fn[name+replaceSuffix]) { return TRUE; }\n\n\tvar old = $.fn[name+replaceSuffix] = $.fn[name];\n\t$.fn[name] = function() {\n\t\treturn func.apply(this, arguments) || old.apply(this, arguments);\n\t};\n});\n\n/* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar).\n * This snippet is taken directly from jQuery UI source code found here:\n *     http://code.jquery.com/ui/jquery-ui-git.js\n */\nif(!$.ui) {\n\t$['cleanData'+replaceSuffix] = $.cleanData;\n\t$.cleanData = function( elems ) {\n\t\tfor(var i = 0, elem; (elem = $( elems[i] )).length; i++) {\n\t\t\tif(elem.attr(ATTR_HAS)) {\n\t\t\t\t/* eslint-disable no-empty */\n\t\t\t\ttry { elem.triggerHandler('removeqtip'); }\n\t\t\t\tcatch( e ) {}\n\t\t\t\t/* eslint-enable no-empty */\n\t\t\t}\n\t\t}\n\t\t$['cleanData'+replaceSuffix].apply(this, arguments);\n\t};\n}\n;// qTip version\nQTIP.version = '3.0.3-5-g';\n\n// Base ID for all qTips\nQTIP.nextid = 0;\n\n// Inactive events array\nQTIP.inactiveEvents = INACTIVE_EVENTS;\n\n// Base z-index for all qTips\nQTIP.zindex = 15000;\n\n// Define configuration defaults\nQTIP.defaults = {\n\tprerender: FALSE,\n\tid: FALSE,\n\toverwrite: TRUE,\n\tsuppress: TRUE,\n\tcontent: {\n\t\ttext: TRUE,\n\t\tattr: 'title',\n\t\ttitle: FALSE,\n\t\tbutton: FALSE\n\t},\n\tposition: {\n\t\tmy: 'top left',\n\t\tat: 'bottom right',\n\t\ttarget: FALSE,\n\t\tcontainer: FALSE,\n\t\tviewport: FALSE,\n\t\tadjust: {\n\t\t\tx: 0, y: 0,\n\t\t\tmouse: TRUE,\n\t\t\tscroll: TRUE,\n\t\t\tresize: TRUE,\n\t\t\tmethod: 'flipinvert flipinvert'\n\t\t},\n\t\teffect: function(api, pos) {\n\t\t\t$(this).animate(pos, {\n\t\t\t\tduration: 200,\n\t\t\t\tqueue: FALSE\n\t\t\t});\n\t\t}\n\t},\n\tshow: {\n\t\ttarget: FALSE,\n\t\tevent: 'mouseenter',\n\t\teffect: TRUE,\n\t\tdelay: 90,\n\t\tsolo: FALSE,\n\t\tready: FALSE,\n\t\tautofocus: FALSE\n\t},\n\thide: {\n\t\ttarget: FALSE,\n\t\tevent: 'mouseleave',\n\t\teffect: TRUE,\n\t\tdelay: 0,\n\t\tfixed: FALSE,\n\t\tinactive: FALSE,\n\t\tleave: 'window',\n\t\tdistance: FALSE\n\t},\n\tstyle: {\n\t\tclasses: '',\n\t\twidget: FALSE,\n\t\twidth: FALSE,\n\t\theight: FALSE,\n\t\tdef: TRUE\n\t},\n\tevents: {\n\t\trender: NULL,\n\t\tmove: NULL,\n\t\tshow: NULL,\n\t\thide: NULL,\n\t\ttoggle: NULL,\n\t\tvisible: NULL,\n\t\thidden: NULL,\n\t\tfocus: NULL,\n\t\tblur: NULL\n\t}\n};\n;var TIP,\ncreateVML,\nSCALE,\nPIXEL_RATIO,\nBACKING_STORE_RATIO,\n\n// Common CSS strings\nMARGIN = 'margin',\nBORDER = 'border',\nCOLOR = 'color',\nBG_COLOR = 'background-color',\nTRANSPARENT = 'transparent',\nIMPORTANT = ' !important',\n\n// Check if the browser supports <canvas/> elements\nHASCANVAS = !!document.createElement('canvas').getContext,\n\n// Invalid colour values used in parseColours()\nINVALID = /rgba?\\(0, 0, 0(, 0)?\\)|transparent|#123456/i;\n\n// Camel-case method, taken from jQuery source\n// http://code.jquery.com/jquery-1.8.0.js\nfunction camel(s) { return s.charAt(0).toUpperCase() + s.slice(1); }\n\n/*\n * Modified from Modernizr's testPropsAll()\n * http://modernizr.com/downloads/modernizr-latest.js\n */\nvar cssProps = {}, cssPrefixes = ['Webkit', 'O', 'Moz', 'ms'];\nfunction vendorCss(elem, prop) {\n\tvar ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n\t\tprops = (prop + ' ' + cssPrefixes.join(ucProp + ' ') + ucProp).split(' '),\n\t\tcur, val, i = 0;\n\n\t// If the property has already been mapped...\n\tif(cssProps[prop]) { return elem.css(cssProps[prop]); }\n\n\twhile(cur = props[i++]) {\n\t\tif((val = elem.css(cur)) !== undefined) {\n\t\t\tcssProps[prop] = cur;\n\t\t\treturn val;\n\t\t}\n\t}\n}\n\n// Parse a given elements CSS property into an int\nfunction intCss(elem, prop) {\n\treturn Math.ceil(parseFloat(vendorCss(elem, prop)));\n}\n\n\n// VML creation (for IE only)\nif(!HASCANVAS) {\n\tcreateVML = function(tag, props, style) {\n\t\treturn '<qtipvml:'+tag+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"qtip-vml\" '+(props||'')+\n\t\t\t' style=\"behavior: url(#default#VML); '+(style||'')+ '\" />';\n\t};\n}\n\n// Canvas only definitions\nelse {\n\tPIXEL_RATIO = window.devicePixelRatio || 1;\n\tBACKING_STORE_RATIO = (function() {\n\t\tvar context = document.createElement('canvas').getContext('2d');\n\t\treturn context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio ||\n\t\t\t\tcontext.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1;\n\t})();\n\tSCALE = PIXEL_RATIO / BACKING_STORE_RATIO;\n}\n\n\nfunction Tip(qtip, options) {\n\tthis._ns = 'tip';\n\tthis.options = options;\n\tthis.offset = options.offset;\n\tthis.size = [ options.width, options.height ];\n\n\t// Initialize\n\tthis.qtip = qtip;\n\tthis.init(qtip);\n}\n\n$.extend(Tip.prototype, {\n\tinit: function(qtip) {\n\t\tvar context, tip;\n\n\t\t// Create tip element and prepend to the tooltip\n\t\ttip = this.element = qtip.elements.tip = $('<div />', { 'class': NAMESPACE+'-tip' }).prependTo(qtip.tooltip);\n\n\t\t// Create tip drawing element(s)\n\t\tif(HASCANVAS) {\n\t\t\t// save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()!\n\t\t\tcontext = $('<canvas />').appendTo(this.element)[0].getContext('2d');\n\n\t\t\t// Setup constant parameters\n\t\t\tcontext.lineJoin = 'miter';\n\t\t\tcontext.miterLimit = 100000;\n\t\t\tcontext.save();\n\t\t}\n\t\telse {\n\t\t\tcontext = createVML('shape', 'coordorigin=\"0,0\"', 'position:absolute;');\n\t\t\tthis.element.html(context + context);\n\n\t\t\t// Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML\n\t\t\tqtip._bind( $('*', tip).add(tip), ['click', 'mousedown'], function(event) { event.stopPropagation(); }, this._ns);\n\t\t}\n\n\t\t// Bind update events\n\t\tqtip._bind(qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this);\n\n\t\t// Create it\n\t\tthis.create();\n\t},\n\n\t_swapDimensions: function() {\n\t\tthis.size[0] = this.options.height;\n\t\tthis.size[1] = this.options.width;\n\t},\n\t_resetDimensions: function() {\n\t\tthis.size[0] = this.options.width;\n\t\tthis.size[1] = this.options.height;\n\t},\n\n\t_useTitle: function(corner) {\n\t\tvar titlebar = this.qtip.elements.titlebar;\n\t\treturn titlebar && (\n\t\t\tcorner.y === TOP || corner.y === CENTER && this.element.position().top + this.size[1] / 2 + this.options.offset < titlebar.outerHeight(TRUE)\n\t\t);\n\t},\n\n\t_parseCorner: function(corner) {\n\t\tvar my = this.qtip.options.position.my;\n\n\t\t// Detect corner and mimic properties\n\t\tif(corner === FALSE || my === FALSE) {\n\t\t\tcorner = FALSE;\n\t\t}\n\t\telse if(corner === TRUE) {\n\t\t\tcorner = new CORNER( my.string() );\n\t\t}\n\t\telse if(!corner.string) {\n\t\t\tcorner = new CORNER(corner);\n\t\t\tcorner.fixed = TRUE;\n\t\t}\n\n\t\treturn corner;\n\t},\n\n\t_parseWidth: function(corner, side, use) {\n\t\tvar elements = this.qtip.elements,\n\t\t\tprop = BORDER + camel(side) + 'Width';\n\n\t\treturn (use ? intCss(use, prop) : \n\t\t\tintCss(elements.content, prop) ||\n\t\t\tintCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||\n\t\t\tintCss(elements.tooltip, prop)\n\t\t) || 0;\n\t},\n\n\t_parseRadius: function(corner) {\n\t\tvar elements = this.qtip.elements,\n\t\t\tprop = BORDER + camel(corner.y) + camel(corner.x) + 'Radius';\n\n\t\treturn BROWSER.ie < 9 ? 0 :\n\t\t\tintCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) ||\n\t\t\tintCss(elements.tooltip, prop) || 0;\n\t},\n\n\t_invalidColour: function(elem, prop, compare) {\n\t\tvar val = elem.css(prop);\n\t\treturn !val || compare && val === elem.css(compare) || INVALID.test(val) ? FALSE : val;\n\t},\n\n\t_parseColours: function(corner) {\n\t\tvar elements = this.qtip.elements,\n\t\t\ttip = this.element.css('cssText', ''),\n\t\t\tborderSide = BORDER + camel(corner[ corner.precedance ]) + camel(COLOR),\n\t\t\tcolorElem = this._useTitle(corner) && elements.titlebar || elements.content,\n\t\t\tcss = this._invalidColour, color = [];\n\n\t\t// Attempt to detect the background colour from various elements, left-to-right precedance\n\t\tcolor[0] = css(tip, BG_COLOR) || css(colorElem, BG_COLOR) || css(elements.content, BG_COLOR) ||\n\t\t\tcss(elements.tooltip, BG_COLOR) || tip.css(BG_COLOR);\n\n\t\t// Attempt to detect the correct border side colour from various elements, left-to-right precedance\n\t\tcolor[1] = css(tip, borderSide, COLOR) || css(colorElem, borderSide, COLOR) ||\n\t\t\tcss(elements.content, borderSide, COLOR) || css(elements.tooltip, borderSide, COLOR) || elements.tooltip.css(borderSide);\n\n\t\t// Reset background and border colours\n\t\t$('*', tip).add(tip).css('cssText', BG_COLOR+':'+TRANSPARENT+IMPORTANT+';'+BORDER+':0'+IMPORTANT+';');\n\n\t\treturn color;\n\t},\n\n\t_calculateSize: function(corner) {\n\t\tvar y = corner.precedance === Y,\n\t\t\twidth = this.options.width,\n\t\t\theight = this.options.height,\n\t\t\tisCenter = corner.abbrev() === 'c',\n\t\t\tbase = (y ? width: height) * (isCenter ? 0.5 : 1),\n\t\t\tpow = Math.pow,\n\t\t\tround = Math.round,\n\t\t\tbigHyp, ratio, result,\n\n\t\tsmallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ),\n\t\thyp = [\n\t\t\tthis.border / base * smallHyp,\n\t\t\tthis.border / height * smallHyp\n\t\t];\n\n\t\thyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(this.border, 2) );\n\t\thyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(this.border, 2) );\n\n\t\tbigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]);\n\t\tratio = bigHyp / smallHyp;\n\n\t\tresult = [ round(ratio * width), round(ratio * height) ];\n\t\treturn y ? result : result.reverse();\n\t},\n\n\t// Tip coordinates calculator\n\t_calculateTip: function(corner, size, scale) {\n\t\tscale = scale || 1;\n\t\tsize = size || this.size;\n\n\t\tvar width = size[0] * scale,\n\t\t\theight = size[1] * scale,\n\t\t\twidth2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2),\n\n\t\t// Define tip coordinates in terms of height and width values\n\t\ttips = {\n\t\t\tbr:\t[0,0,\t\twidth,height,\twidth,0],\n\t\t\tbl:\t[0,0,\t\twidth,0,\t\t0,height],\n\t\t\ttr:\t[0,height,\twidth,0,\t\twidth,height],\n\t\t\ttl:\t[0,0,\t\t0,height,\t\twidth,height],\n\t\t\ttc:\t[0,height,\twidth2,0,\t\twidth,height],\n\t\t\tbc:\t[0,0,\t\twidth,0,\t\twidth2,height],\n\t\t\trc:\t[0,0,\t\twidth,height2,\t0,height],\n\t\t\tlc:\t[width,0,\twidth,height,\t0,height2]\n\t\t};\n\n\t\t// Set common side shapes\n\t\ttips.lt = tips.br; tips.rt = tips.bl;\n\t\ttips.lb = tips.tr; tips.rb = tips.tl;\n\n\t\treturn tips[ corner.abbrev() ];\n\t},\n\n\t// Tip coordinates drawer (canvas)\n\t_drawCoords: function(context, coords) {\n\t\tcontext.beginPath();\n\t\tcontext.moveTo(coords[0], coords[1]);\n\t\tcontext.lineTo(coords[2], coords[3]);\n\t\tcontext.lineTo(coords[4], coords[5]);\n\t\tcontext.closePath();\n\t},\n\n\tcreate: function() {\n\t\t// Determine tip corner\n\t\tvar c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner(this.options.corner);\n\n\t\t// If we have a tip corner...\n\t\tthis.enabled = !!this.corner && this.corner.abbrev() !== 'c';\n\t\tif(this.enabled) {\n\t\t\t// Cache it\n\t\t\tthis.qtip.cache.corner = c.clone();\n\n\t\t\t// Create it\n\t\t\tthis.update();\n\t\t}\n\n\t\t// Toggle tip element\n\t\tthis.element.toggle(this.enabled);\n\n\t\treturn this.corner;\n\t},\n\n\tupdate: function(corner, position) {\n\t\tif(!this.enabled) { return this; }\n\n\t\tvar elements = this.qtip.elements,\n\t\t\ttip = this.element,\n\t\t\tinner = tip.children(),\n\t\t\toptions = this.options,\n\t\t\tcurSize = this.size,\n\t\t\tmimic = options.mimic,\n\t\t\tround = Math.round,\n\t\t\tcolor, precedance, context,\n\t\t\tcoords, bigCoords, translate, newSize, border;\n\n\t\t// Re-determine tip if not already set\n\t\tif(!corner) { corner = this.qtip.cache.corner || this.corner; }\n\n\t\t// Use corner property if we detect an invalid mimic value\n\t\tif(mimic === FALSE) { mimic = corner; }\n\n\t\t// Otherwise inherit mimic properties from the corner object as necessary\n\t\telse {\n\t\t\tmimic = new CORNER(mimic);\n\t\t\tmimic.precedance = corner.precedance;\n\n\t\t\tif(mimic.x === 'inherit') { mimic.x = corner.x; }\n\t\t\telse if(mimic.y === 'inherit') { mimic.y = corner.y; }\n\t\t\telse if(mimic.x === mimic.y) {\n\t\t\t\tmimic[ corner.precedance ] = corner[ corner.precedance ];\n\t\t\t}\n\t\t}\n\t\tprecedance = mimic.precedance;\n\n\t\t// Ensure the tip width.height are relative to the tip position\n\t\tif(corner.precedance === X) { this._swapDimensions(); }\n\t\telse { this._resetDimensions(); }\n\n\t\t// Update our colours\n\t\tcolor = this.color = this._parseColours(corner);\n\n\t\t// Detect border width, taking into account colours\n\t\tif(color[1] !== TRANSPARENT) {\n\t\t\t// Grab border width\n\t\t\tborder = this.border = this._parseWidth(corner, corner[corner.precedance]);\n\n\t\t\t// If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips)\n\t\t\tif(options.border && border < 1 && !INVALID.test(color[1])) { color[0] = color[1]; }\n\n\t\t\t// Set border width (use detected border width if options.border is true)\n\t\t\tthis.border = border = options.border !== TRUE ? options.border : border;\n\t\t}\n\n\t\t// Border colour was invalid, set border to zero\n\t\telse { this.border = border = 0; }\n\n\t\t// Determine tip size\n\t\tnewSize = this.size = this._calculateSize(corner);\n\t\ttip.css({\n\t\t\twidth: newSize[0],\n\t\t\theight: newSize[1],\n\t\t\tlineHeight: newSize[1]+'px'\n\t\t});\n\n\t\t// Calculate tip translation\n\t\tif(corner.precedance === Y) {\n\t\t\ttranslate = [\n\t\t\t\tround(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2),\n\t\t\t\tround(mimic.y === TOP ? newSize[1] - curSize[1] : 0)\n\t\t\t];\n\t\t}\n\t\telse {\n\t\t\ttranslate = [\n\t\t\t\tround(mimic.x === LEFT ? newSize[0] - curSize[0] : 0),\n\t\t\t\tround(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2)\n\t\t\t];\n\t\t}\n\n\t\t// Canvas drawing implementation\n\t\tif(HASCANVAS) {\n\t\t\t// Grab canvas context and clear/save it\n\t\t\tcontext = inner[0].getContext('2d');\n\t\t\tcontext.restore(); context.save();\n\t\t\tcontext.clearRect(0,0,6000,6000);\n\n\t\t\t// Calculate coordinates\n\t\t\tcoords = this._calculateTip(mimic, curSize, SCALE);\n\t\t\tbigCoords = this._calculateTip(mimic, this.size, SCALE);\n\n\t\t\t// Set the canvas size using calculated size\n\t\t\tinner.attr(WIDTH, newSize[0] * SCALE).attr(HEIGHT, newSize[1] * SCALE);\n\t\t\tinner.css(WIDTH, newSize[0]).css(HEIGHT, newSize[1]);\n\n\t\t\t// Draw the outer-stroke tip\n\t\t\tthis._drawCoords(context, bigCoords);\n\t\t\tcontext.fillStyle = color[1];\n\t\t\tcontext.fill();\n\n\t\t\t// Draw the actual tip\n\t\t\tcontext.translate(translate[0] * SCALE, translate[1] * SCALE);\n\t\t\tthis._drawCoords(context, coords);\n\t\t\tcontext.fillStyle = color[0];\n\t\t\tcontext.fill();\n\t\t}\n\n\t\t// VML (IE Proprietary implementation)\n\t\telse {\n\t\t\t// Calculate coordinates\n\t\t\tcoords = this._calculateTip(mimic);\n\n\t\t\t// Setup coordinates string\n\t\t\tcoords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] +\n\t\t\t\t',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe';\n\n\t\t\t// Setup VML-specific offset for pixel-perfection\n\t\t\ttranslate[2] = border && /^(r|b)/i.test(corner.string()) ?\n\t\t\t\tBROWSER.ie === 8 ? 2 : 1 : 0;\n\n\t\t\t// Set initial CSS\n\t\t\tinner.css({\n\t\t\t\tcoordsize: newSize[0]+border + ' ' + newSize[1]+border,\n\t\t\t\tantialias: ''+(mimic.string().indexOf(CENTER) > -1),\n\t\t\t\tleft: translate[0] - translate[2] * Number(precedance === X),\n\t\t\t\ttop: translate[1] - translate[2] * Number(precedance === Y),\n\t\t\t\twidth: newSize[0] + border,\n\t\t\t\theight: newSize[1] + border\n\t\t\t})\n\t\t\t.each(function(i) {\n\t\t\t\tvar $this = $(this);\n\n\t\t\t\t// Set shape specific attributes\n\t\t\t\t$this[ $this.prop ? 'prop' : 'attr' ]({\n\t\t\t\t\tcoordsize: newSize[0]+border + ' ' + newSize[1]+border,\n\t\t\t\t\tpath: coords,\n\t\t\t\t\tfillcolor: color[0],\n\t\t\t\t\tfilled: !!i,\n\t\t\t\t\tstroked: !i\n\t\t\t\t})\n\t\t\t\t.toggle(!!(border || i));\n\n\t\t\t\t// Check if border is enabled and add stroke element\n\t\t\t\t!i && $this.html( createVML(\n\t\t\t\t\t'stroke', 'weight=\"'+border*2+'px\" color=\"'+color[1]+'\" miterlimit=\"1000\" joinstyle=\"miter\"'\n\t\t\t\t) );\n\t\t\t});\n\t\t}\n\n\t\t// Opera bug #357 - Incorrect tip position\n\t\t// https://github.com/Craga89/qTip2/issues/367\n\t\twindow.opera && setTimeout(function() {\n\t\t\telements.tip.css({\n\t\t\t\tdisplay: 'inline-block',\n\t\t\t\tvisibility: 'visible'\n\t\t\t});\n\t\t}, 1);\n\n\t\t// Position if needed\n\t\tif(position !== FALSE) { this.calculate(corner, newSize); }\n\t},\n\n\tcalculate: function(corner, size) {\n\t\tif(!this.enabled) { return FALSE; }\n\n\t\tvar self = this,\n\t\t\telements = this.qtip.elements,\n\t\t\ttip = this.element,\n\t\t\tuserOffset = this.options.offset,\n\t\t\tposition = {},\n\t\t\tprecedance, corners;\n\n\t\t// Inherit corner if not provided\n\t\tcorner = corner || this.corner;\n\t\tprecedance = corner.precedance;\n\n\t\t// Determine which tip dimension to use for adjustment\n\t\tsize = size || this._calculateSize(corner);\n\n\t\t// Setup corners and offset array\n\t\tcorners = [ corner.x, corner.y ];\n\t\tif(precedance === X) { corners.reverse(); }\n\n\t\t// Calculate tip position\n\t\t$.each(corners, function(i, side) {\n\t\t\tvar b, bc, br;\n\n\t\t\tif(side === CENTER) {\n\t\t\t\tb = precedance === Y ? LEFT : TOP;\n\t\t\t\tposition[ b ] = '50%';\n\t\t\t\tposition[MARGIN+'-' + b] = -Math.round(size[ precedance === Y ? 0 : 1 ] / 2) + userOffset;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tb = self._parseWidth(corner, side, elements.tooltip);\n\t\t\t\tbc = self._parseWidth(corner, side, elements.content);\n\t\t\t\tbr = self._parseRadius(corner);\n\n\t\t\t\tposition[ side ] = Math.max(-self.border, i ? bc : userOffset + (br > b ? br : -b));\n\t\t\t}\n\t\t});\n\n\t\t// Adjust for tip size\n\t\tposition[ corner[precedance] ] -= size[ precedance === X ? 0 : 1 ];\n\n\t\t// Set and return new position\n\t\ttip.css({ margin: '', top: '', bottom: '', left: '', right: '' }).css(position);\n\t\treturn position;\n\t},\n\n\treposition: function(event, api, pos) {\n\t\tif(!this.enabled) { return; }\n\n\t\tvar cache = api.cache,\n\t\t\tnewCorner = this.corner.clone(),\n\t\t\tadjust = pos.adjusted,\n\t\t\tmethod = api.options.position.adjust.method.split(' '),\n\t\t\thorizontal = method[0],\n\t\t\tvertical = method[1] || method[0],\n\t\t\tshift = { left: FALSE, top: FALSE, x: 0, y: 0 },\n\t\t\toffset, css = {}, props;\n\n\t\tfunction shiftflip(direction, precedance, popposite, side, opposite) {\n\t\t\t// Horizontal - Shift or flip method\n\t\t\tif(direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER) {\n\t\t\t\tnewCorner.precedance = newCorner.precedance === X ? Y : X;\n\t\t\t}\n\t\t\telse if(direction !== SHIFT && adjust[side]){\n\t\t\t\tnewCorner[precedance] = newCorner[precedance] === CENTER ?\n\t\t\t\t\tadjust[side] > 0 ? side : opposite :\n\t\t\t\t\tnewCorner[precedance] === side ? opposite : side;\n\t\t\t}\n\t\t}\n\n\t\tfunction shiftonly(xy, side, opposite) {\n\t\t\tif(newCorner[xy] === CENTER) {\n\t\t\t\tcss[MARGIN+'-'+side] = shift[xy] = offset[MARGIN+'-'+side] - adjust[side];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprops = offset[opposite] !== undefined ?\n\t\t\t\t\t[ adjust[side], -offset[side] ] : [ -adjust[side], offset[side] ];\n\n\t\t\t\tif( (shift[xy] = Math.max(props[0], props[1])) > props[0] ) {\n\t\t\t\t\tpos[side] -= adjust[side];\n\t\t\t\t\tshift[side] = FALSE;\n\t\t\t\t}\n\n\t\t\t\tcss[ offset[opposite] !== undefined ? opposite : side ] = shift[xy];\n\t\t\t}\n\t\t}\n\n\t\t// If our tip position isn't fixed e.g. doesn't adjust with viewport...\n\t\tif(this.corner.fixed !== TRUE) {\n\t\t\t// Perform shift/flip adjustments\n\t\t\tshiftflip(horizontal, X, Y, LEFT, RIGHT);\n\t\t\tshiftflip(vertical, Y, X, TOP, BOTTOM);\n\n\t\t\t// Update and redraw the tip if needed (check cached details of last drawn tip)\n\t\t\tif(newCorner.string() !== cache.corner.string() || cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) {\n\t\t\t\tthis.update(newCorner, FALSE);\n\t\t\t}\n\t\t}\n\n\t\t// Setup tip offset properties\n\t\toffset = this.calculate(newCorner);\n\n\t\t// Readjust offset object to make it left/top\n\t\tif(offset.right !== undefined) { offset.left = -offset.right; }\n\t\tif(offset.bottom !== undefined) { offset.top = -offset.bottom; }\n\t\toffset.user = this.offset;\n\n\t\t// Perform shift adjustments\n\t\tshift.left = horizontal === SHIFT && !!adjust.left;\n\t\tif(shift.left) {\n\t\t\tshiftonly(X, LEFT, RIGHT);\n\t\t}\n\t\tshift.top = vertical === SHIFT && !!adjust.top;\n\t\tif(shift.top) {\n\t\t\tshiftonly(Y, TOP, BOTTOM);\n\t\t}\n\n\t\t/*\n\t\t* If the tip is adjusted in both dimensions, or in a\n\t\t* direction that would cause it to be anywhere but the\n\t\t* outer border, hide it!\n\t\t*/\n\t\tthis.element.css(css).toggle(\n\t\t\t!(shift.x && shift.y || newCorner.x === CENTER && shift.y || newCorner.y === CENTER && shift.x)\n\t\t);\n\n\t\t// Adjust position to accomodate tip dimensions\n\t\tpos.left -= offset.left.charAt ? offset.user :\n\t\t\thorizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0;\n\t\tpos.top -= offset.top.charAt ? offset.user :\n\t\t\tvertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0;\n\n\t\t// Cache details\n\t\tcache.cornerLeft = adjust.left; cache.cornerTop = adjust.top;\n\t\tcache.corner = newCorner.clone();\n\t},\n\n\tdestroy: function() {\n\t\t// Unbind events\n\t\tthis.qtip._unbind(this.qtip.tooltip, this._ns);\n\n\t\t// Remove the tip element(s)\n\t\tif(this.qtip.elements.tip) {\n\t\t\tthis.qtip.elements.tip.find('*')\n\t\t\t\t.remove().end().remove();\n\t\t}\n\t}\n});\n\nTIP = PLUGINS.tip = function(api) {\n\treturn new Tip(api, api.options.style.tip);\n};\n\n// Initialize tip on render\nTIP.initialize = 'render';\n\n// Setup plugin sanitization options\nTIP.sanitize = function(options) {\n\tif(options.style && 'tip' in options.style) {\n\t\tvar opts = options.style.tip;\n\t\tif(typeof opts !== 'object') { opts = options.style.tip = { corner: opts }; }\n\t\tif(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; }\n\t}\n};\n\n// Add new option checks for the plugin\nCHECKS.tip = {\n\t'^position.my|style.tip.(corner|mimic|border)$': function() {\n\t\t// Make sure a tip can be drawn\n\t\tthis.create();\n\n\t\t// Reposition the tooltip\n\t\tthis.qtip.reposition();\n\t},\n\t'^style.tip.(height|width)$': function(obj) {\n\t\t// Re-set dimensions and redraw the tip\n\t\tthis.size = [ obj.width, obj.height ];\n\t\tthis.update();\n\n\t\t// Reposition the tooltip\n\t\tthis.qtip.reposition();\n\t},\n\t'^content.title|style.(classes|widget)$': function() {\n\t\tthis.update();\n\t}\n};\n\n// Extend original qTip defaults\n$.extend(TRUE, QTIP.defaults, {\n\tstyle: {\n\t\ttip: {\n\t\t\tcorner: TRUE,\n\t\t\tmimic: FALSE,\n\t\t\twidth: 6,\n\t\t\theight: 6,\n\t\t\tborder: TRUE,\n\t\t\toffset: 0\n\t\t}\n\t}\n});\n;var MODAL, OVERLAY,\n\tMODALCLASS = 'qtip-modal',\n\tMODALSELECTOR = '.'+MODALCLASS;\n\nOVERLAY = function()\n{\n\tvar self = this,\n\t\tfocusableElems = {},\n\t\tcurrent,\n\t\tprevState,\n\t\telem;\n\n\t// Modified code from jQuery UI 1.10.0 source\n\t// http://code.jquery.com/ui/1.10.0/jquery-ui.js\n\tfunction focusable(element) {\n\t\t// Use the defined focusable checker when possible\n\t\tif($.expr[':'].focusable) { return $.expr[':'].focusable; }\n\n\t\tvar isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')),\n\t\t\tnodeName = element.nodeName && element.nodeName.toLowerCase(),\n\t\t\tmap, mapName, img;\n\n\t\tif('area' === nodeName) {\n\t\t\tmap = element.parentNode;\n\t\t\tmapName = map.name;\n\t\t\tif(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\timg = $('img[usemap=#' + mapName + ']')[0];\n\t\t\treturn !!img && img.is(':visible');\n\t\t}\n\n\t\treturn /input|select|textarea|button|object/.test( nodeName ) ?\n\t\t\t!element.disabled :\n\t\t\t'a' === nodeName ?\n\t\t\t\telement.href || isTabIndexNotNaN :\n\t\t\t\tisTabIndexNotNaN\n\t\t;\n\t}\n\n\t// Focus inputs using cached focusable elements (see update())\n\tfunction focusInputs(blurElems) {\n\t\t// Blurring body element in IE causes window.open windows to unfocus!\n\t\tif(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); }\n\n\t\t// Focus the inputs\n\t\telse { focusableElems.first().focus(); }\n\t}\n\n\t// Steal focus from elements outside tooltip\n\tfunction stealFocus(event) {\n\t\tif(!elem.is(':visible')) { return; }\n\n\t\tvar target = $(event.target),\n\t\t\ttooltip = current.tooltip,\n\t\t\tcontainer = target.closest(SELECTOR),\n\t\t\ttargetOnTop;\n\n\t\t// Determine if input container target is above this\n\t\ttargetOnTop = container.length < 1 ? FALSE :\n\t\t\tparseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10);\n\n\t\t// If we're showing a modal, but focus has landed on an input below\n\t\t// this modal, divert focus to the first visible input in this modal\n\t\t// or if we can't find one... the tooltip itself\n\t\tif(!targetOnTop && target.closest(SELECTOR)[0] !== tooltip[0]) {\n\t\t\tfocusInputs(target);\n\t\t}\n\t}\n\n\t$.extend(self, {\n\t\tinit: function() {\n\t\t\t// Create document overlay\n\t\t\telem = self.elem = $('<div />', {\n\t\t\t\tid: 'qtip-overlay',\n\t\t\t\thtml: '<div></div>',\n\t\t\t\tmousedown: function() { return FALSE; }\n\t\t\t})\n\t\t\t.hide();\n\n\t\t\t// Make sure we can't focus anything outside the tooltip\n\t\t\t$(document.body).bind('focusin'+MODALSELECTOR, stealFocus);\n\n\t\t\t// Apply keyboard \"Escape key\" close handler\n\t\t\t$(document).bind('keydown'+MODALSELECTOR, function(event) {\n\t\t\t\tif(current && current.options.show.modal.escape && event.keyCode === 27) {\n\t\t\t\t\tcurrent.hide(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply click handler for blur option\n\t\t\telem.bind('click'+MODALSELECTOR, function(event) {\n\t\t\t\tif(current && current.options.show.modal.blur) {\n\t\t\t\t\tcurrent.hide(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn self;\n\t\t},\n\n\t\tupdate: function(api) {\n\t\t\t// Update current API reference\n\t\t\tcurrent = api;\n\n\t\t\t// Update focusable elements if enabled\n\t\t\tif(api.options.show.modal.stealfocus !== FALSE) {\n\t\t\t\tfocusableElems = api.tooltip.find('*').filter(function() {\n\t\t\t\t\treturn focusable(this);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse { focusableElems = []; }\n\t\t},\n\n\t\ttoggle: function(api, state, duration) {\n\t\t\tvar tooltip = api.tooltip,\n\t\t\t\toptions = api.options.show.modal,\n\t\t\t\teffect = options.effect,\n\t\t\t\ttype = state ? 'show': 'hide',\n\t\t\t\tvisible = elem.is(':visible'),\n\t\t\t\tvisibleModals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip);\n\n\t\t\t// Set active tooltip API reference\n\t\t\tself.update(api);\n\n\t\t\t// If the modal can steal the focus...\n\t\t\t// Blur the current item and focus anything in the modal we an\n\t\t\tif(state && options.stealfocus !== FALSE) {\n\t\t\t\tfocusInputs( $(':focus') );\n\t\t\t}\n\n\t\t\t// Toggle backdrop cursor style on show\n\t\t\telem.toggleClass('blurs', options.blur);\n\n\t\t\t// Append to body on show\n\t\t\tif(state) {\n\t\t\t\telem.appendTo(document.body);\n\t\t\t}\n\n\t\t\t// Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible\n\t\t\tif(elem.is(':animated') && visible === state && prevState !== FALSE || !state && visibleModals.length) {\n\t\t\t\treturn self;\n\t\t\t}\n\n\t\t\t// Stop all animations\n\t\t\telem.stop(TRUE, FALSE);\n\n\t\t\t// Use custom function if provided\n\t\t\tif($.isFunction(effect)) {\n\t\t\t\teffect.call(elem, state);\n\t\t\t}\n\n\t\t\t// If no effect type is supplied, use a simple toggle\n\t\t\telse if(effect === FALSE) {\n\t\t\t\telem[ type ]();\n\t\t\t}\n\n\t\t\t// Use basic fade function\n\t\t\telse {\n\t\t\t\telem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() {\n\t\t\t\t\tif(!state) { elem.hide(); }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Reset position and detach from body on hide\n\t\t\tif(!state) {\n\t\t\t\telem.queue(function(next) {\n\t\t\t\t\telem.css({ left: '', top: '' });\n\t\t\t\t\tif(!$(MODALSELECTOR).length) { elem.detach(); }\n\t\t\t\t\tnext();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Cache the state\n\t\t\tprevState = state;\n\n\t\t\t// If the tooltip is destroyed, set reference to null\n\t\t\tif(current.destroyed) { current = NULL; }\n\n\t\t\treturn self;\n\t\t}\n\t});\n\n\tself.init();\n};\nOVERLAY = new OVERLAY();\n\nfunction Modal(api, options) {\n\tthis.options = options;\n\tthis._ns = '-modal';\n\n\tthis.qtip = api;\n\tthis.init(api);\n}\n\n$.extend(Modal.prototype, {\n\tinit: function(qtip) {\n\t\tvar tooltip = qtip.tooltip;\n\n\t\t// If modal is disabled... return\n\t\tif(!this.options.on) { return this; }\n\n\t\t// Set overlay reference\n\t\tqtip.elements.overlay = OVERLAY.elem;\n\n\t\t// Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index\n\t\ttooltip.addClass(MODALCLASS).css('z-index', QTIP.modal_zindex + $(MODALSELECTOR).length);\n\n\t\t// Apply our show/hide/focus modal events\n\t\tqtip._bind(tooltip, ['tooltipshow', 'tooltiphide'], function(event, api, duration) {\n\t\t\tvar oEvent = event.originalEvent;\n\n\t\t\t// Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop\n\t\t\tif(event.target === tooltip[0]) {\n\t\t\t\tif(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(OVERLAY.elem[0]).length) {\n\t\t\t\t\t/* eslint-disable no-empty */\n\t\t\t\t\ttry { event.preventDefault(); }\n\t\t\t\t\tcatch(e) {}\n\t\t\t\t\t/* eslint-enable no-empty */\n\t\t\t\t}\n\t\t\t\telse if(!oEvent || oEvent && oEvent.type !== 'tooltipsolo') {\n\t\t\t\t\tthis.toggle(event, event.type === 'tooltipshow', duration);\n\t\t\t\t}\n\t\t\t}\n\t\t}, this._ns, this);\n\n\t\t// Adjust modal z-index on tooltip focus\n\t\tqtip._bind(tooltip, 'tooltipfocus', function(event, api) {\n\t\t\t// If focus was cancelled before it reached us, don't do anything\n\t\t\tif(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; }\n\n\t\t\tvar qtips = $(MODALSELECTOR),\n\n\t\t\t// Keep the modal's lower than other, regular qtips\n\t\t\tnewIndex = QTIP.modal_zindex + qtips.length,\n\t\t\tcurIndex = parseInt(tooltip[0].style.zIndex, 10);\n\n\t\t\t// Set overlay z-index\n\t\t\tOVERLAY.elem[0].style.zIndex = newIndex - 1;\n\n\t\t\t// Reduce modal z-index's and keep them properly ordered\n\t\t\tqtips.each(function() {\n\t\t\t\tif(this.style.zIndex > curIndex) {\n\t\t\t\t\tthis.style.zIndex -= 1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Fire blur event for focused tooltip\n\t\t\tqtips.filter('.' + CLASS_FOCUS).qtip('blur', event.originalEvent);\n\n\t\t\t// Set the new z-index\n\t\t\ttooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex;\n\n\t\t\t// Set current\n\t\t\tOVERLAY.update(api);\n\n\t\t\t// Prevent default handling\n\t\t\t/* eslint-disable no-empty */\n\t\t\ttry { event.preventDefault(); }\n\t\t\tcatch(e) {}\n\t\t\t/* eslint-enable no-empty */\n\t\t}, this._ns, this);\n\n\t\t// Focus any other visible modals when this one hides\n\t\tqtip._bind(tooltip, 'tooltiphide', function(event) {\n\t\t\tif(event.target === tooltip[0]) {\n\t\t\t\t$(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event);\n\t\t\t}\n\t\t}, this._ns, this);\n\t},\n\n\ttoggle: function(event, state, duration) {\n\t\t// Make sure default event hasn't been prevented\n\t\tif(event && event.isDefaultPrevented()) { return this; }\n\n\t\t// Toggle it\n\t\tOVERLAY.toggle(this.qtip, !!state, duration);\n\t},\n\n\tdestroy: function() {\n\t\t// Remove modal class\n\t\tthis.qtip.tooltip.removeClass(MODALCLASS);\n\n\t\t// Remove bound events\n\t\tthis.qtip._unbind(this.qtip.tooltip, this._ns);\n\n\t\t// Delete element reference\n\t\tOVERLAY.toggle(this.qtip, FALSE);\n\t\tdelete this.qtip.elements.overlay;\n\t}\n});\n\n\nMODAL = PLUGINS.modal = function(api) {\n\treturn new Modal(api, api.options.show.modal);\n};\n\n// Setup sanitiztion rules\nMODAL.sanitize = function(opts) {\n\tif(opts.show) {\n\t\tif(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; }\n\t\telse if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; }\n\t}\n};\n\n// Base z-index for all modal tooltips (use qTip core z-index as a base)\n/* eslint-disable camelcase */\nQTIP.modal_zindex = QTIP.zindex - 200;\n/* eslint-enable camelcase */\n\n// Plugin needs to be initialized on render\nMODAL.initialize = 'render';\n\n// Setup option set checks\nCHECKS.modal = {\n\t'^show.modal.(on|blur)$': function() {\n\t\t// Initialise\n\t\tthis.destroy();\n\t\tthis.init();\n\n\t\t// Show the modal if not visible already and tooltip is visible\n\t\tthis.qtip.elems.overlay.toggle(\n\t\t\tthis.qtip.tooltip[0].offsetWidth > 0\n\t\t);\n\t}\n};\n\n// Extend original api defaults\n$.extend(TRUE, QTIP.defaults, {\n\tshow: {\n\t\tmodal: {\n\t\t\ton: FALSE,\n\t\t\teffect: TRUE,\n\t\t\tblur: TRUE,\n\t\t\tstealfocus: TRUE,\n\t\t\tescape: TRUE\n\t\t}\n\t}\n});\n;PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight)\n{\n\tvar target = posOptions.target,\n\t\ttooltip = api.elements.tooltip,\n\t\tmy = posOptions.my,\n\t\tat = posOptions.at,\n\t\tadjust = posOptions.adjust,\n\t\tmethod = adjust.method.split(' '),\n\t\tmethodX = method[0],\n\t\tmethodY = method[1] || method[0],\n\t\tviewport = posOptions.viewport,\n\t\tcontainer = posOptions.container,\n\t\tadjusted = { left: 0, top: 0 },\n\t\tfixed, newMy, containerOffset, containerStatic,\n\t\tviewportWidth, viewportHeight, viewportScroll, viewportOffset;\n\n\t// If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return\n\tif(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') {\n\t\treturn adjusted;\n\t}\n\n\t// Cach container details\n\tcontainerOffset = container.offset() || adjusted;\n\tcontainerStatic = container.css('position') === 'static';\n\n\t// Cache our viewport details\n\tfixed = tooltip.css('position') === 'fixed';\n\tviewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth(FALSE);\n\tviewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight(FALSE);\n\tviewportScroll = { left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop() };\n\tviewportOffset = viewport.offset() || adjusted;\n\n\t// Generic calculation method\n\tfunction calculate(side, otherSide, type, adjustment, side1, side2, lengthName, targetLength, elemLength) {\n\t\tvar initialPos = position[side1],\n\t\t\tmySide = my[side],\n\t\t\tatSide = at[side],\n\t\t\tisShift = type === SHIFT,\n\t\t\tmyLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2,\n\t\t\tatLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2,\n\t\t\tsideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]),\n\t\t\toverflow1 = sideOffset - initialPos,\n\t\t\toverflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset,\n\t\t\toffset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0);\n\n\t\t// shift\n\t\tif(isShift) {\n\t\t\toffset = (mySide === side1 ? 1 : -1) * myLength;\n\n\t\t\t// Adjust position but keep it within viewport dimensions\n\t\t\tposition[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0;\n\t\t\tposition[side1] = Math.max(\n\t\t\t\t-containerOffset[side1] + viewportOffset[side1],\n\t\t\t\tinitialPos - offset,\n\t\t\t\tMath.min(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\t-containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight),\n\t\t\t\t\t\tinitialPos + offset\n\t\t\t\t\t),\n\t\t\t\t\tposition[side1],\n\n\t\t\t\t\t// Make sure we don't adjust complete off the element when using 'center'\n\t\t\t\t\tmySide === 'center' ? initialPos - myLength : 1E9\n\t\t\t\t)\n\t\t\t);\n\n\t\t}\n\n\t\t// flip/flipinvert\n\t\telse {\n\t\t\t// Update adjustment amount depending on if using flipinvert or flip\n\t\t\tadjustment *= type === FLIPINVERT ? 2 : 0;\n\n\t\t\t// Check for overflow on the left/top\n\t\t\tif(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) {\n\t\t\t\tposition[side1] -= offset + adjustment;\n\t\t\t\tnewMy.invert(side, side1);\n\t\t\t}\n\n\t\t\t// Check for overflow on the bottom/right\n\t\t\telse if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0)  ) {\n\t\t\t\tposition[side1] -= (mySide === CENTER ? -offset : offset) + adjustment;\n\t\t\t\tnewMy.invert(side, side2);\n\t\t\t}\n\n\t\t\t// Make sure we haven't made things worse with the adjustment and reset if so\n\t\t\tif(position[side1] < viewportScroll[side1] && -position[side1] > overflow2) {\n\t\t\t\tposition[side1] = initialPos; newMy = my.clone();\n\t\t\t}\n\t\t}\n\n\t\treturn position[side1] - initialPos;\n\t}\n\n\t// Set newMy if using flip or flipinvert methods\n\tif(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); }\n\n\t// Adjust position based onviewport and adjustment options\n\tadjusted = {\n\t\tleft: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0,\n\t\ttop: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0,\n\t\tmy: newMy\n\t};\n\n\treturn adjusted;\n};\n;PLUGINS.polys = {\n\t// POLY area coordinate calculator\n\t//\tSpecial thanks to Ed Cradock for helping out with this.\n\t//\tUses a binary search algorithm to find suitable coordinates.\n\tpolygon: function(baseCoords, corner) {\n\t\tvar result = {\n\t\t\twidth: 0, height: 0,\n\t\t\tposition: {\n\t\t\t\ttop: 1e10, right: 0,\n\t\t\t\tbottom: 0, left: 1e10\n\t\t\t},\n\t\t\tadjustable: FALSE\n\t\t},\n\t\ti = 0, next,\n\t\tcoords = [],\n\t\tcompareX = 1, compareY = 1,\n\t\trealX = 0, realY = 0,\n\t\tnewWidth, newHeight;\n\n\t\t// First pass, sanitize coords and determine outer edges\n\t\ti = baseCoords.length; \n\t\twhile(i--) {\n\t\t\tnext = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ];\n\n\t\t\tif(next[0] > result.position.right){ result.position.right = next[0]; }\n\t\t\tif(next[0] < result.position.left){ result.position.left = next[0]; }\n\t\t\tif(next[1] > result.position.bottom){ result.position.bottom = next[1]; }\n\t\t\tif(next[1] < result.position.top){ result.position.top = next[1]; }\n\n\t\t\tcoords.push(next);\n\t\t}\n\n\t\t// Calculate height and width from outer edges\n\t\tnewWidth = result.width = Math.abs(result.position.right - result.position.left);\n\t\tnewHeight = result.height = Math.abs(result.position.bottom - result.position.top);\n\n\t\t// If it's the center corner...\n\t\tif(corner.abbrev() === 'c') {\n\t\t\tresult.position = {\n\t\t\t\tleft: result.position.left + result.width / 2,\n\t\t\t\ttop: result.position.top + result.height / 2\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Second pass, use a binary search algorithm to locate most suitable coordinate\n\t\t\twhile(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0)\n\t\t\t{\n\t\t\t\tnewWidth = Math.floor(newWidth / 2);\n\t\t\t\tnewHeight = Math.floor(newHeight / 2);\n\n\t\t\t\tif(corner.x === LEFT){ compareX = newWidth; }\n\t\t\t\telse if(corner.x === RIGHT){ compareX = result.width - newWidth; }\n\t\t\t\telse{ compareX += Math.floor(newWidth / 2); }\n\n\t\t\t\tif(corner.y === TOP){ compareY = newHeight; }\n\t\t\t\telse if(corner.y === BOTTOM){ compareY = result.height - newHeight; }\n\t\t\t\telse{ compareY += Math.floor(newHeight / 2); }\n\n\t\t\t\ti = coords.length;\n\t\t\t\twhile(i--)\n\t\t\t\t{\n\t\t\t\t\tif(coords.length < 2){ break; }\n\n\t\t\t\t\trealX = coords[i][0] - result.position.left;\n\t\t\t\t\trealY = coords[i][1] - result.position.top;\n\n\t\t\t\t\tif(\n\t\t\t\t\t\tcorner.x === LEFT && realX >= compareX ||\n\t\t\t\t\t\tcorner.x === RIGHT && realX <= compareX ||\n\t\t\t\t\t\tcorner.x === CENTER && (realX < compareX || realX > result.width - compareX) ||\n\t\t\t\t\t\tcorner.y === TOP && realY >= compareY ||\n\t\t\t\t\t\tcorner.y === BOTTOM && realY <= compareY ||\n\t\t\t\t\t\tcorner.y === CENTER && (realY < compareY || realY > result.height - compareY)) {\n\t\t\t\t\t\tcoords.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult.position = { left: coords[0][0], top: coords[0][1] };\n\t\t}\n\n\t\treturn result;\n\t},\n\n\trect: function(ax, ay, bx, by) {\n\t\treturn {\n\t\t\twidth: Math.abs(bx - ax),\n\t\t\theight: Math.abs(by - ay),\n\t\t\tposition: {\n\t\t\t\tleft: Math.min(ax, bx),\n\t\t\t\ttop: Math.min(ay, by)\n\t\t\t}\n\t\t};\n\t},\n\n\t_angles: {\n\t\ttc: 3 / 2, tr: 7 / 4, tl: 5 / 4,\n\t\tbc: 1 / 2, br: 1 / 4, bl: 3 / 4,\n\t\trc: 2, lc: 1, c: 0\n\t},\n\tellipse: function(cx, cy, rx, ry, corner) {\n\t\tvar c = PLUGINS.polys._angles[ corner.abbrev() ],\n\t\t\trxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ),\n\t\t\trys = ry * Math.sin( c * Math.PI );\n\n\t\treturn {\n\t\t\twidth: rx * 2 - Math.abs(rxc),\n\t\t\theight: ry * 2 - Math.abs(rys),\n\t\t\tposition: {\n\t\t\t\tleft: cx + rxc,\n\t\t\t\ttop: cy + rys\n\t\t\t},\n\t\t\tadjustable: FALSE\n\t\t};\n\t},\n\tcircle: function(cx, cy, r, corner) {\n\t\treturn PLUGINS.polys.ellipse(cx, cy, r, r, corner);\n\t}\n};\n;PLUGINS.svg = function(api, svg, corner)\n{\n\tvar elem = svg[0],\n\t\troot = $(elem.ownerSVGElement),\n\t\townerDocument = elem.ownerDocument,\n\t\tstrokeWidth2 = (parseInt(svg.css('stroke-width'), 10) || 0) / 2,\n\t\tframeOffset, mtx, transformed,\n\t\tlen, next, i, points,\n\t\tresult, position;\n\n\t// Ascend the parentNode chain until we find an element with getBBox()\n\twhile(!elem.getBBox) { elem = elem.parentNode; }\n\tif(!elem.getBBox || !elem.parentNode) { return FALSE; }\n\n\t// Determine which shape calculation to use\n\tswitch(elem.nodeName) {\n\t\tcase 'ellipse':\n\t\tcase 'circle':\n\t\t\tresult = PLUGINS.polys.ellipse(\n\t\t\t\telem.cx.baseVal.value,\n\t\t\t\telem.cy.baseVal.value,\n\t\t\t\t(elem.rx || elem.r).baseVal.value + strokeWidth2,\n\t\t\t\t(elem.ry || elem.r).baseVal.value + strokeWidth2,\n\t\t\t\tcorner\n\t\t\t);\n\t\tbreak;\n\n\t\tcase 'line':\n\t\tcase 'polygon':\n\t\tcase 'polyline':\n\t\t\t// Determine points object (line has none, so mimic using array)\n\t\t\tpoints = elem.points || [\n\t\t\t\t{ x: elem.x1.baseVal.value, y: elem.y1.baseVal.value },\n\t\t\t\t{ x: elem.x2.baseVal.value, y: elem.y2.baseVal.value }\n\t\t\t];\n\n\t\t\tfor(result = [], i = -1, len = points.numberOfItems || points.length; ++i < len;) {\n\t\t\t\tnext = points.getItem ? points.getItem(i) : points[i];\n\t\t\t\tresult.push.apply(result, [next.x, next.y]);\n\t\t\t}\n\n\t\t\tresult = PLUGINS.polys.polygon(result, corner);\n\t\tbreak;\n\n\t\t// Unknown shape or rectangle? Use bounding box\n\t\tdefault:\n\t\t\tresult = elem.getBBox();\n\t\t\tresult = {\n\t\t\t\twidth: result.width,\n\t\t\t\theight: result.height,\n\t\t\t\tposition: {\n\t\t\t\t\tleft: result.x,\n\t\t\t\t\ttop: result.y\n\t\t\t\t}\n\t\t\t};\n\t\tbreak;\n\t}\n\n\t// Shortcut assignments\n\tposition = result.position;\n\troot = root[0];\n\n\t// Convert position into a pixel value\n\tif(root.createSVGPoint) {\n\t\tmtx = elem.getScreenCTM();\n\t\tpoints = root.createSVGPoint();\n\n\t\tpoints.x = position.left;\n\t\tpoints.y = position.top;\n\t\ttransformed = points.matrixTransform( mtx );\n\t\tposition.left = transformed.x;\n\t\tposition.top = transformed.y;\n\t}\n\n\t// Check the element is not in a child document, and if so, adjust for frame elements offset\n\tif(ownerDocument !== document && api.position.target !== 'mouse') {\n\t\tframeOffset = $((ownerDocument.defaultView || ownerDocument.parentWindow).frameElement).offset();\n\t\tif(frameOffset) {\n\t\t\tposition.left += frameOffset.left;\n\t\t\tposition.top += frameOffset.top;\n\t\t}\n\t}\n\n\t// Adjust by scroll offset of owner document\n\townerDocument = $(ownerDocument);\n\tposition.left += ownerDocument.scrollLeft();\n\tposition.top += ownerDocument.scrollTop();\n\n\treturn result;\n};\n;PLUGINS.imagemap = function(api, area, corner)\n{\n\tif(!area.jquery) { area = $(area); }\n\n\tvar shape = (area.attr('shape') || 'rect').toLowerCase().replace('poly', 'polygon'),\n\t\timage = $('img[usemap=\"#'+area.parent('map').attr('name')+'\"]'),\n\t\tcoordsString = $.trim(area.attr('coords')),\n\t\tcoordsArray = coordsString.replace(/,$/, '').split(','),\n\t\timageOffset, coords, i, result, len;\n\n\t// If we can't find the image using the map...\n\tif(!image.length) { return FALSE; }\n\n\t// Pass coordinates string if polygon\n\tif(shape === 'polygon') {\n\t\tresult = PLUGINS.polys.polygon(coordsArray, corner);\n\t}\n\n\t// Otherwise parse the coordinates and pass them as arguments\n\telse if(PLUGINS.polys[shape]) {\n\t\tfor(i = -1, len = coordsArray.length, coords = []; ++i < len;) {\n\t\t\tcoords.push( parseInt(coordsArray[i], 10) );\n\t\t}\n\n\t\tresult = PLUGINS.polys[shape].apply(\n\t\t\tthis, coords.concat(corner)\n\t\t);\n\t}\n\n\t// If no shapre calculation method was found, return false\n\telse { return FALSE; }\n\n\t// Make sure we account for padding and borders on the image\n\timageOffset = image.offset();\n\timageOffset.left += Math.ceil((image.outerWidth(FALSE) - image.width()) / 2);\n\timageOffset.top += Math.ceil((image.outerHeight(FALSE) - image.height()) / 2);\n\n\t// Add image position to offset coordinates\n\tresult.position.left += imageOffset.left;\n\tresult.position.top += imageOffset.top;\n\n\treturn result;\n};\n;var IE6,\n\n/*\n * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)\n * Special thanks to Brandon Aaron\n */\nBGIFRAME = '<iframe class=\"qtip-bgiframe\" frameborder=\"0\" tabindex=\"-1\" src=\"javascript:\\'\\';\" ' +\n\t' style=\"display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' +\n\t\t'-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\"></iframe>';\n\nfunction Ie6(api) {\n\tthis._ns = 'ie6';\n\n\tthis.qtip = api;\n\tthis.init(api);\n}\n\n$.extend(Ie6.prototype, {\n\t_scroll : function() {\n\t\tvar overlay = this.qtip.elements.overlay;\n\t\toverlay && (overlay[0].style.top = $(window).scrollTop() + 'px');\n\t},\n\n\tinit: function(qtip) {\n\t\tvar tooltip = qtip.tooltip;\n\n\t\t// Create the BGIFrame element if needed\n\t\tif($('select, object').length < 1) {\n\t\t\tthis.bgiframe = qtip.elements.bgiframe = $(BGIFRAME).appendTo(tooltip);\n\n\t\t\t// Update BGIFrame on tooltip move\n\t\t\tqtip._bind(tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this);\n\t\t}\n\n\t\t// redraw() container for width/height calculations\n\t\tthis.redrawContainer = $('<div/>', { id: NAMESPACE+'-rcontainer' })\n\t\t\t.appendTo(document.body);\n\n\t\t// Fixup modal plugin if present too\n\t\tif( qtip.elements.overlay && qtip.elements.overlay.addClass('qtipmodal-ie6fix') ) {\n\t\t\tqtip._bind(window, ['scroll', 'resize'], this._scroll, this._ns, this);\n\t\t\tqtip._bind(tooltip, ['tooltipshow'], this._scroll, this._ns, this);\n\t\t}\n\n\t\t// Set dimensions\n\t\tthis.redraw();\n\t},\n\n\tadjustBGIFrame: function() {\n\t\tvar tooltip = this.qtip.tooltip,\n\t\t\tdimensions = {\n\t\t\t\theight: tooltip.outerHeight(FALSE),\n\t\t\t\twidth: tooltip.outerWidth(FALSE)\n\t\t\t},\n\t\t\tplugin = this.qtip.plugins.tip,\n\t\t\ttip = this.qtip.elements.tip,\n\t\t\ttipAdjust, offset;\n\n\t\t// Adjust border offset\n\t\toffset = parseInt(tooltip.css('borderLeftWidth'), 10) || 0;\n\t\toffset = { left: -offset, top: -offset };\n\n\t\t// Adjust for tips plugin\n\t\tif(plugin && tip) {\n\t\t\ttipAdjust = plugin.corner.precedance === 'x' ? [WIDTH, LEFT] : [HEIGHT, TOP];\n\t\t\toffset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ]();\n\t\t}\n\n\t\t// Update bgiframe\n\t\tthis.bgiframe.css(offset).css(dimensions);\n\t},\n\n\t// Max/min width simulator function\n\tredraw: function() {\n\t\tif(this.qtip.rendered < 1 || this.drawing) { return this; }\n\n\t\tvar tooltip = this.qtip.tooltip,\n\t\t\tstyle = this.qtip.options.style,\n\t\t\tcontainer = this.qtip.options.position.container,\n\t\t\tperc, width, max, min;\n\n\t\t// Set drawing flag\n\t\tthis.qtip.drawing = 1;\n\n\t\t// If tooltip has a set height/width, just set it... like a boss!\n\t\tif(style.height) { tooltip.css(HEIGHT, style.height); }\n\t\tif(style.width) { tooltip.css(WIDTH, style.width); }\n\n\t\t// Simulate max/min width if not set width present...\n\t\telse {\n\t\t\t// Reset width and add fluid class\n\t\t\ttooltip.css(WIDTH, '').appendTo(this.redrawContainer);\n\n\t\t\t// Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!)\n\t\t\twidth = tooltip.width();\n\t\t\tif(width % 2 < 1) { width += 1; }\n\n\t\t\t// Grab our max/min properties\n\t\t\tmax = tooltip.css('maxWidth') || '';\n\t\t\tmin = tooltip.css('minWidth') || '';\n\n\t\t\t// Parse into proper pixel values\n\t\t\tperc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0;\n\t\t\tmax = (max.indexOf('%') > -1 ? perc : 1 * parseInt(max, 10)) || width;\n\t\t\tmin = (min.indexOf('%') > -1 ? perc : 1 * parseInt(min, 10)) || 0;\n\n\t\t\t// Determine new dimension size based on max/min/current values\n\t\t\twidth = max + min ? Math.min(Math.max(width, min), max) : width;\n\n\t\t\t// Set the newly calculated width and remvoe fluid class\n\t\t\ttooltip.css(WIDTH, Math.round(width)).appendTo(container);\n\t\t}\n\n\t\t// Set drawing flag\n\t\tthis.drawing = 0;\n\n\t\treturn this;\n\t},\n\n\tdestroy: function() {\n\t\t// Remove iframe\n\t\tthis.bgiframe && this.bgiframe.remove();\n\n\t\t// Remove bound events\n\t\tthis.qtip._unbind([window, this.qtip.tooltip], this._ns);\n\t}\n});\n\nIE6 = PLUGINS.ie6 = function(api) {\n\t// Proceed only if the browser is IE6\n\treturn BROWSER.ie === 6 ? new Ie6(api) : FALSE;\n};\n\nIE6.initialize = 'render';\n\nCHECKS.ie6 = {\n\t'^content|style$': function() {\n\t\tthis.redraw();\n\t}\n};\n;}));\n}( window, document ));\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport '@okta/qtip';\nimport BaseView from '../../BaseView.js';\n\n/**\n * @class InputLabel\n * @extends {Okta.View}\n * @private\n * The input's label.\n */\nvar InputLabel = BaseView.extend({\n  className: 'okta-form-label o-form-label',\n  attributes: {\n    'data-se': 'o-form-label'\n  },\n\n  /**\n   * @constructor\n   * @param  {Object} options options hash\n   * @param  {String} [options.type] Input type\n   * @param  {String|Function} [options.label] Label text\n   * @param  {String|Function} [options.sublabel] Sub label text\n   * @param  {String|Function} [options.tooltip] Tooltip text\n   * @param  {String|Function} [options.inputId] Id of the inputs\n   * @param  {String|Function} [options.id] Id of the inputs\n   */\n  constructor: function (options) {\n    /* eslint max-statements: [2, 16] complexity: [2, 7]*/\n    oktaUnderscore.defaults(options, {\n      inputId: options.id\n    });\n\n    delete options.id;\n    BaseView.apply(this, arguments);\n  },\n  // standardLabel: space added in the end of the label to avoid selecting label text with double click in read mode\n  template: _Handlebars2.template({\n    \"1\": function (container, depth0, helpers, partials, data) {\n      return \"<legend>\";\n    },\n    \"3\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<label for=\\\"\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"inputId\") || (depth0 != null ? lookupProperty(depth0, \"inputId\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"inputId\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 61\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 72\n          }\n        }\n      }) : helper)) + \"\\\"></label>\";\n    },\n    \"5\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return container.escapeExpression((helper = (helper = lookupProperty(helpers, \"label\") || (depth0 != null ? lookupProperty(depth0, \"label\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"label\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 116\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 125\n          }\n        }\n      }) : helper));\n    },\n    \"7\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          alias2 = container.hooks.helperMissing,\n          alias3 = \"function\",\n          alias4 = container.escapeExpression,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<label for=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"inputId\") || (depth0 != null ? lookupProperty(depth0, \"inputId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"inputId\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 167\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 178\n          }\n        }\n      }) : helper)) + \"\\\">\" + alias4((helper = (helper = lookupProperty(helpers, \"label\") || (depth0 != null ? lookupProperty(depth0, \"label\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"label\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 180\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 189\n          }\n        }\n      }) : helper)) + \"&nbsp;</label>\";\n    },\n    \"9\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<span class=\\\"o-form-explain\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"sublabel\") || (depth0 != null ? lookupProperty(depth0, \"sublabel\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"sublabel\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 256\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 268\n          }\n        }\n      }) : helper)) + \"</span>\";\n    },\n    \"11\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<span class=\\\"o-form-tooltip icon-16 icon-only form-help-16\\\" title=\\\"\" + container.escapeExpression(container.lambda((stack1 = depth0 != null ? lookupProperty(depth0, \"tooltip\") : depth0) != null ? lookupProperty(stack1, \"text\") : stack1, depth0)) + \"\\\"></span>\";\n    },\n    \"13\": function (container, depth0, helpers, partials, data) {\n      return \"</legend>\";\n    },\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"group\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(1, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 28\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"_isLabelView\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(3, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 28\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 89\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"_isRadioOrCheckbox\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(5, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 89\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 132\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"_standardLabel\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(7, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 132\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 210\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"sublabel\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(9, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 210\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 282\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"tooltip\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(11, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 282\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 397\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"group\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(13, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 397\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 426\n          }\n        }\n      })) != null ? stack1 : \"\");\n    },\n    \"useData\": true\n  }),\n  getTemplateData: function () {\n    const options = {\n      label: ''\n    };\n\n    oktaUnderscore.each(['inputId', 'label', 'sublabel', 'tooltip', 'group'], function (option) {\n      options[option] = oktaUnderscore.resultCtx(this.options, option, this);\n    }, this);\n\n    if (this._isLabelView(options.label)) {\n      options._isLabelView = true;\n    } else if (oktaUnderscore.contains(['radio', 'checkbox'], this.options.type) || !options.label) {\n      options._isRadioOrCheckbox = true;\n    } else {\n      options._standardLabel = true;\n    }\n\n    if (options.tooltip) {\n      if (oktaUnderscore.isString(options.tooltip)) {\n        options.tooltip = {\n          text: options.tooltip\n        };\n      }\n    }\n\n    return options;\n  },\n  _isLabelView: function (label) {\n    return !oktaUnderscore.isUndefined(label) && label instanceof BaseView;\n  },\n  postRender: function () {\n    const options = this.getTemplateData();\n\n    if (this._isLabelView(options.label)) {\n      this.removeChildren();\n      this.add(options.label, 'label');\n    }\n\n    if (options.tooltip) {\n      this.$('.o-form-tooltip').qtip(oktaUnderscore.extend({\n        style: {\n          classes: 'qtip-custom qtip-shadow'\n        },\n        position: {\n          my: window.okta && window.okta.theme === 'dstheme' ? 'bottom center' : 'bottom left',\n          at: 'top center'\n        },\n        hide: {\n          fixed: true\n        },\n        show: {\n          delay: 0\n        }\n      }, options.tooltip.options));\n    }\n  }\n});\n\nexport { InputLabel as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport BaseView from '../../BaseView.js';\nimport FormUtil from './FormUtil.js';\n\nfunction runCallback(callback, field) {\n  callback.apply(this, oktaUnderscore.map(field.split(/\\s+/), function (field) {\n    return this.model.get(field);\n  }, this));\n}\n\nfunction runIf(fn, ctx) {\n  if (oktaUnderscore.isFunction(fn)) {\n    fn.call(ctx);\n  }\n}\n/**\n * @class InputWrapper\n * @extends Okta.View\n * @private\n * The outer wrapper that warps the label and the input container\n */\n\n\nvar InputWrapper = BaseView.extend({\n  tagName: function () {\n    if (this.options.group) {\n      return 'fieldset';\n    }\n\n    return 'div';\n  },\n  className: function () {\n    let className = 'o-form-fieldset';\n\n    if (this.options['label-top']) {\n      className += ' o-form-label-top';\n    }\n\n    if (this.options.readOnly) {\n      className += ' o-form-read-mode';\n    }\n\n    return className;\n  },\n  attributes: function () {\n    return {\n      'data-se': this.options['data-se'] || 'o-form-fieldset'\n    };\n  },\n\n  /**\n   * @constructor\n   * @param  {Object} options options hash\n   * @param  {Object} [options.events]\n   * @param  {Object} [options.bindings]\n   * @param  {Object} [options.showWhen]\n   * @param  {Function} [options.initialize] post initialize callback\n   * @param  {Function} [options.render] post render callback\n   */\n  constructor: function (options) {\n    if (options.className) {\n      this.inputWrapperClassName = this.className;\n      this.optionsClassName = options.className;\n\n      options.className = function () {\n        return oktaUnderscore.result(this, 'inputWrapperClassName', '') + ' ' + oktaUnderscore.result(this, 'optionsClassName');\n      };\n    }\n\n    BaseView.apply(this, arguments);\n\n    oktaUnderscore.each(options.events || {}, function (callback, event) {\n      this.listenTo(this.model, event, callback);\n    }, this);\n\n    oktaUnderscore.each(options.bindings || {}, function (callback, field) {\n      this.listenTo(this.model, FormUtil.changeEventString(field.split(/\\s+/)), oktaUnderscore.bind(runCallback, this, callback, field));\n    }, this);\n\n    FormUtil.applyShowWhen(this, options.showWhen);\n    FormUtil.applyToggleWhen(this, options.toggleWhen);\n    runIf(options.initialize, this);\n  },\n  postRender: function () {\n    oktaUnderscore.each(this.options.bindings || {}, runCallback, this);\n\n    runIf(this.options.render, this);\n  },\n\n  /**\n   * @return {InputLabel}\n   */\n  getLabel: function () {\n    return this.size() > 1 ? this.at(0) : null;\n  },\n\n  /**\n   * @deprecated ambiguous naming, use {@link #getInputContainer}\n   */\n  getInput: function () {\n    return this.getInputContainer();\n  },\n\n  /**\n   * @return {InputContainer}\n   */\n  getInputContainer: function () {\n    return this.at(this.size() > 1 ? 1 : 0);\n  },\n\n  /**\n   * @return {BaseInput[]}\n   */\n  getInputs: function () {\n    return this.getInputContainer().toArray();\n  },\n  focus: function () {\n    return this.getInput().focus();\n  }\n});\n\nexport { InputWrapper as default };\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaJQueryStatic from '../../util/jquery-wrapper.js';\nimport oktaUnderscore from '../../util/underscore-wrapper.js';\nimport StringUtil from '../../util/StringUtil.js';\nimport BaseView from '../BaseView.js';\nimport ReadModeBar from './components/ReadModeBar.js';\nimport Toolbar from './components/Toolbar.js';\nimport ErrorBanner from './helpers/ErrorBanner.js';\nimport ErrorParser from './helpers/ErrorParser.js';\nimport FormUtil from './helpers/FormUtil.js';\nimport InputContainer from './helpers/InputContainer.js';\nimport InputFactory from './helpers/InputFactory.js';\nimport InputLabel from './helpers/InputLabel.js';\nimport InputWrapper from './helpers/InputWrapper.js';\nimport SettingsModel from '../../util/SettingsModel.js';\n\nconst template = _Handlebars2.template({\n  \"1\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<h2 class=\\\"o-form-title-bar\\\" data-se=\\\"o-form-title-bar\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"title\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 75\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 84\n        }\n      }\n    }) : helper)) + \"</h2>\";\n  },\n  \"3\": function (container, depth0, helpers, partials, data) {\n    var stack1,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return (stack1 = lookupProperty(helpers, \"if\").call(depth0 != null ? depth0 : container.nullContext || {}, depth0 != null ? lookupProperty(depth0, \"title\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(4, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 192\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 288\n        }\n      }\n    })) != null ? stack1 : \"\";\n  },\n  \"4\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<h2 data-se=\\\"o-form-head\\\" class=\\\"okta-form-title o-form-head\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"title\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 267\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 276\n        }\n      }\n    }) : helper)) + \"</h2>\";\n  },\n  \"6\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<p class=\\\"okta-form-subtitle o-form-explain\\\" data-se=\\\"o-form-explain\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"subtitle\") || (depth0 != null ? lookupProperty(depth0, \"subtitle\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"subtitle\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 385\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 397\n        }\n      }\n    }) : helper)) + \"</p>\";\n  },\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    var stack1,\n        helper,\n        alias1 = depth0 != null ? depth0 : container.nullContext || {},\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"hasReadMode\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(1, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 0\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 96\n        }\n      }\n    })) != null ? stack1 : \"\") + \"<div data-se=\\\"o-form-content\\\" class=\\\"o-form-content \" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"layout\") || (depth0 != null ? lookupProperty(depth0, \"layout\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(alias1, {\n      \"name\": \"layout\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 148\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 158\n        }\n      }\n    }) : helper)) + \" clearfix\\\">\" + ((stack1 = lookupProperty(helpers, \"unless\").call(alias1, depth0 != null ? lookupProperty(depth0, \"hasReadMode\") : depth0, {\n      \"name\": \"unless\",\n      \"hash\": {},\n      \"fn\": container.program(3, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 169\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 299\n        }\n      }\n    })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"subtitle\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(6, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 299\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 408\n        }\n      }\n    })) != null ? stack1 : \"\") + \"<div class=\\\"o-form-error-container\\\" data-se=\\\"o-form-error-container\\\"></div><div class=\\\"o-form-fieldset-container\\\" data-se=\\\"o-form-fieldset-container\\\"></div></div>\";\n  },\n  \"useData\": true\n});\n\nconst sectionTitleTemplate = _Handlebars2.template({\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<h2 class=\\\"o-form-head\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"title\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 24\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 33\n        }\n      }\n    }) : helper)) + \"</h2>\";\n  },\n  \"useData\": true\n});\n\nconst pointerEventsSupported = oktaJQueryStatic('<div>').css({\n  'pointer-events': 'auto'\n})[0].style.pointerEvents === 'auto'; // polyfill for `pointer-events: none;` in IE < 11\n// Logic borrowed from https://github.com/kmewhort/pointer_events_polyfill (BSD)\n\nfunction pointerEventsPolyfill(e) {\n  if (!pointerEventsSupported && this.$el.hasClass('o-form-saving')) {\n    const $el = oktaJQueryStatic(e.currentTarget);\n    $el.css('display', 'none');\n    const underneathElem = document.elementFromPoint(e.clientX, e.clientY);\n    $el.css('display', 'block');\n    e.target = underneathElem;\n    oktaJQueryStatic(underneathElem).trigger(e);\n    return false;\n  }\n}\n\nconst events = {\n  submit: function (e) {\n    e.preventDefault();\n\n    this.__save();\n  }\n};\n\noktaUnderscore.each(['click', 'dblclick', 'mousedown', 'mouseup'], function (event) {\n  events[event + ' .o-form-input'] = pointerEventsPolyfill;\n});\n\nconst attributes = function (model) {\n  model || (model = {});\n  const collection = model && model.collection || {};\n  return {\n    method: 'POST',\n    action: oktaUnderscore.result(model, 'urlRoot') || oktaUnderscore.result(collection, 'url') || window.location.pathname,\n    'data-se': 'o-form',\n    slot: 'content'\n  };\n};\n\nconst convertSavingState = function (rawSavingStateEvent, defaultEvent) {\n  rawSavingStateEvent || (rawSavingStateEvent = '');\n  let savingStateEvent = [];\n\n  if (oktaUnderscore.isString(rawSavingStateEvent)) {\n    savingStateEvent = rawSavingStateEvent.split(' ');\n  }\n\n  savingStateEvent = oktaUnderscore.union(savingStateEvent, defaultEvent);\n  return savingStateEvent.join(' ');\n};\n\nconst getErrorSummary = function (responseJSON = {}) {\n  if (Array.isArray(responseJSON.errorCauses) && responseJSON.errorCauses.length > 0) {\n    //set errorSummary from first errorCause which is not field specific error\n    return responseJSON.errorCauses[0].errorSummary;\n  } else {\n    //set errorSummary from top level errorSummary\n    return responseJSON.errorSummary;\n  }\n};\n/**\n * A Form utility framework\n *\n * Okta.Form is a form that operates on one flat model\n * It exposes one main factory method, {@link module:Okta.Form#addInput|addInput}, which add inputs to the form,\n * and each input operates on one field in the model, identified by the `name` field.\n *\n * See:\n * [Basic O-Form Tutorial](https://github.com/okta/courage/wiki/Basic-O-Form)\n *\n * @class module:Okta.Form\n * @extends module:Okta.View\n * @param {Object} options options hash (See {@link module:Okta.View|View})\n * @param {Object} options.model the model this form operates on\n * @param {Boolean} [options.label-top=false] position label on top of inputs\n * @param {Boolean} [options.wide=false] Use a wide input layout for all input\n */\n\n/**\n * Fired when the \"Save\" button is clicked\n * @event module:Okta.Form#save\n * @param {module:Okta.Model} model Model used in the form\n */\n\n/**\n * Fired after the model is successfully saved - applies when {@link module:Okta.Form#autoSave|autoSave}\n * is set to true\n * @event module:Okta.Form#saved\n * @param {module:Okta.Model} model Model used in the form\n */\n\n/**\n * Fired when the model fires an invalid event or an error event;\n * @event module:Okta.Form#error\n * @param {module:Okta.Model} model Model used in the form\n */\n\n/**\n * Fired when the form layout is likely to be resized\n * @event module:Okta.Form#resize\n * @param {module:Okta.Model} model Model used in the form\n */\n\n/**\n * Fired when the \"Cancel\" button is clicked\n * @event module:Okta.Form#cancel\n */\n\n\nvar BaseForm = BaseView.extend(\n/** @lends module:Okta.Form.prototype */\n{\n  /**\n   * Specifies how to validate form:\n   * - In case \"local\" string provided as a value of the property,\n   * the form will validate only fields added as inputs to the form;\n   * - In case array is provided, the validation will be performed only for fields specified in array;\n   * - In case function is provided, provided function will be used as a validation function,\n   * it must return an error object with the format {fieldName: 'error text'} with as many fields as you need.\n   * @name validate\n   * @memberof module:Okta.Form\n   * @type {String|Array|Function}\n   * @instance\n   */\n  constructor: function (options) {\n    /* eslint max-statements: 0, complexity: 0 */\n    options || (options = {});\n    this.options = options;\n\n    if (options.settings) {\n      this.settings = options.settings;\n    } else {\n      this.settings = options.settings = new SettingsModel();\n    }\n\n    this.id = oktaUnderscore.uniqueId('form');\n    this.tagName = 'form';\n\n    oktaUnderscore.defaults(this.events, events);\n\n    oktaUnderscore.defaults(this.attributes, attributes(options.model));\n\n    this.__buttons = [];\n    this.__errorFields = {};\n\n    this.__saveModelState(options.model);\n\n    const step = oktaUnderscore.result(this, 'step');\n\n    if (step) {\n      // checking exists of `this.save` hence don't have to change to\n      // `_.result(this, 'save')` which will execute the function and\n      // is not the intent.\n      if (!this.save) {\n        const totalStep = oktaUnderscore.result(this, 'totalSteps');\n\n        this.save = !totalStep || step === totalStep ? StringUtil.localize('oform.button.finish', 'courage') : StringUtil.localize('oform.button.next', 'courage');\n      }\n\n      this.className = oktaUnderscore.result(this, 'className') + ' wizard';\n    }\n\n    this.className = oktaUnderscore.result(this, 'className') + ' o-form';\n    this.__toolbar = this.__createToolbar(options);\n    BaseView.call(this, options);\n\n    oktaUnderscore.each(oktaUnderscore.result(this, 'inputs') || [], function (input) {\n      // to ingore extra argumests from `each` iteratee function\n      // http://underscorejs.org/#each\n      this.__addLayoutItem(input);\n    }, this);\n\n    this.add(this.__toolbar, ''); // NOTES: this.model shall be initialized after calling\n    // super (BaseView.call(this, options)) above.\n    //\n\n    this.listenTo(this.model, 'change:__edit__', this.__applyMode);\n    this.listenTo(this.model, 'invalid error', oktaUnderscore.throttle(function (model, resp, showBanner) {\n      this.__showErrors(model, resp, showBanner !== false);\n    }, 100, {\n      trailing: false\n    }));\n    this.listenTo(this.model, 'form:resize', function () {\n      this.trigger('resize');\n    });\n    this.listenTo(this.model, 'form:cancel', oktaUnderscore.throttle(this.__cancel, 100, {\n      trailing: false\n    }));\n    this.listenTo(this.model, 'form:previous', oktaUnderscore.throttle(this.__previous, 100, {\n      trailing: false\n    }));\n    this.__save = oktaUnderscore.throttle(this.__save, 200, {\n      trailing: false\n    });\n    this.listenTo(this.model, 'form:save', function () {\n      this.$el.submit();\n    });\n    this.listenTo(this.model, 'sync', function () {\n      if (this.model.get('__edit__')) {\n        this.model.set('__edit__', false, {\n          silent: true\n        });\n      }\n\n      this.__saveModelState(this.model);\n\n      this.render();\n    });\n    let hasSavingState = this.getAttribute('hasSavingState');\n\n    if (this.getAttribute('autoSave')) {\n      this.listenTo(this, 'save', function (model) {\n        const xhr = model.save();\n\n        if (xhr && xhr.done) {\n          xhr.done(() => {\n            this.trigger('saved', model);\n          });\n        }\n      });\n\n      if (oktaUnderscore.isUndefined(hasSavingState)) {\n        hasSavingState = true;\n      }\n    }\n    /*\n    * Attach model event listeners\n    * by default, model's request event starts the form saving state,\n    * error and sync event stops it\n    * you can define customized saving start and stop state, like\n    * customSavingState: {start: 'requestingAdditionalInfo', stop: 'retrievedAdditionalInfo'}\n    * doing this does not override the default events\n    */\n\n\n    if (hasSavingState) {\n      const customSavingState = this.getAttribute('customSavingState', {});\n      this.listenTo(this.model, convertSavingState(customSavingState.start || '', ['request']), this.__setSavingState);\n      this.listenTo(this.model, convertSavingState(customSavingState.stop || '', ['error', 'sync']), this.__clearSavingState);\n    }\n  },\n\n  /**\n   * Create the bottom button bar\n   * @param  {Object} options options h\n   * @return {Okta.View} The toolbar\n   * @private\n   */\n  __createToolbar: function (options) {\n    const danger = this.getAttribute('danger');\n    const saveBtnClassName = danger === true ? 'button-error' : 'button-primary';\n\n    const step = oktaUnderscore.result(this, 'step');\n\n    const toolbar = new Toolbar(oktaUnderscore.extend({\n      save: this.save || StringUtil.localize('oform.save', 'courage'),\n      saveId: this.saveId,\n      saveClassName: saveBtnClassName,\n      cancel: this.cancel || StringUtil.localize('oform.cancel', 'courage'),\n      noCancelButton: this.noCancelButton || false,\n      noSubmitButton: this.noSubmitButton || false,\n      buttonOrder: this.buttonOrder,\n      hasPrevStep: step && step > 1\n    }, options || this.options));\n\n    oktaUnderscore.each(this.__buttons, function (args) {\n      toolbar.addButton.apply(toolbar, args);\n    });\n\n    return toolbar;\n  },\n  className: '',\n  attributes: {},\n  events: {},\n\n  /**\n   * An array of input configurations to render in the form\n   * @type {Array}\n   */\n  inputs: [],\n  template: null,\n\n  /**\n   * Does the form support read/edit toggle.\n   * @type {Boolean|Function}\n   * @default false\n   */\n  read: false,\n\n  /**\n   * Is the form in readOnly mode.\n   * @type {Boolean|Function}\n   * @default false\n   */\n  readOnly: false,\n\n  /**\n   * Should we not render the button bar\n   * @type {Boolean|Function}\n   * @default false\n   */\n  noButtonBar: false,\n\n  /**\n   * Should we not render a cancel button\n   * @type {Boolean|Function}\n   * @default false\n   */\n  noCancelButton: false,\n\n  /**\n   * Should we not render a save button\n   * @type {Boolean}\n   * @default false\n   */\n  noSubmitButton: false,\n\n  /**\n   * Set the order of the save, cancel and previous buttons (left to right).\n   * @type {Array.<string>}\n   * @default ['previous', 'save', 'cancel']\n   */\n  buttonOrder: ['previous', 'save', 'cancel'],\n\n  /**\n   * The text on the save button\n   * @type {String}\n   * @default \"Save\"\n   */\n  save: null,\n\n  /**\n   * The text on the cancel button\n   * @type {String}\n   * @default \"Cancel\"\n   */\n  cancel: null,\n\n  /**\n   * To use button-error to style the submit button instead of button-primary.\n   * @type {Boolean|Function}\n   * @default false\n   */\n  danger: false,\n\n  /**\n   * A layout CSS class to add to the form\n   * @type {String|Function}\n   * @default \"\"\n   */\n  layout: '',\n\n  /**\n   * The step this form is in the context of a wizard\n   * @type {Number}\n   */\n  step: undefined,\n\n  /**\n   * The total numbers of steps the wizard this form is a part of has\n   * @type {Number}\n   */\n  totalSteps: undefined,\n\n  /**\n   * The form's title\n   * @type {String|Function}\n   */\n  title: null,\n\n  /**\n   * The form's subtitle\n   * @type {String|Function}\n   */\n  subtitle: null,\n\n  /**\n   * Auto-save the model when hitting save. Triggers a `saved` event when done\n   * @type {Boolean}\n   * @default false\n   */\n  autoSave: false,\n\n  /**\n   * Scroll to the top of the form on error\n   * @type {Boolean|Function}\n   * @default true\n   */\n  scrollOnError: true,\n\n  /**\n   * Show the error banner upon error\n   * @type {Boolean|Function}\n   * @default true\n   */\n  showErrors: true,\n\n  /**\n   * The form's scrollable area\n   * @type {String}\n   * @default \".o-form-content\"\n   */\n  resizeSelector: '.o-form-content',\n\n  /**\n   * Sets whether or not the form shows the saving state when\n   * the model is saved.  Has no effect on setSavingState and clearSavingState as those are manual calls\n   * to trigger/clear the saving state.\n   * @name hasSavingState\n   * @memberof module:Okta.Form\n   * @type {Boolean}\n   * @default false\n   * @instance\n   */\n\n  /**\n   * Get an attribute value from options or instance.\n   * Prefer options value over instance value\n   * @param  {String} name Name of the attribute\n   * @param  {Object} defaultValue the default value to return if the attribute is not found\n   * @return {Object} The value\n   */\n  getAttribute: function (name, defaultValue) {\n    let value = oktaUnderscore.resultCtx(this.options, name, this);\n\n    if (oktaUnderscore.isUndefined(value)) {\n      value = oktaUnderscore.result(this, name);\n    }\n\n    return !oktaUnderscore.isUndefined(value) ? value : defaultValue;\n  },\n\n  /**\n   * Does this form have a \"read\" mode\n   * @return {Boolean}\n   */\n  hasReadMode: function () {\n    return !!this.getAttribute('read');\n  },\n\n  /**\n   * Is this form in \"read only\" mode\n   * @return {Boolean}\n   */\n  isReadOnly: function () {\n    return !!this.getAttribute('readOnly');\n  },\n\n  /**\n   * Does this form have a button bar\n   * @return {Boolean}\n   */\n  hasButtonBar: function () {\n    return !(this.getAttribute('noButtonBar') || this.isReadOnly());\n  },\n  render: function () {\n    this.__readModeBar && this.__readModeBar.remove();\n\n    if (this.hasReadMode() && !this.isReadOnly()) {\n      const readModeBar = ReadModeBar.extend({\n        formTitle: this.getAttribute('title', '')\n      });\n      this.__readModeBar = this.add(readModeBar, '.o-form-title-bar').last();\n    }\n\n    const html = template({\n      layout: this.getAttribute('layout', ''),\n      title: this.getAttribute('title', '', true),\n      subtitle: this.getAttribute('subtitle', '', true),\n      hasReadMode: this.hasReadMode()\n    });\n    this.$el.html(html);\n    delete this.template;\n    BaseView.prototype.render.apply(this, arguments);\n\n    this.__applyMode();\n\n    return this;\n  },\n\n  /**\n   * Changes form UI to indicate saving.  Disables all inputs and buttons.  Use this function if you have set\n   * hasSavingState to false on the the form\n   * @private\n   */\n  __setSavingState: function () {\n    this.model.trigger('form:set-saving-state');\n    this.$el.addClass('o-form-saving');\n  },\n\n  /**\n   * Changes form UI back to normal from the saving state.  Use this function if you are have set hasSavingState\n   * to false on the form\n   * @private\n   */\n  __clearSavingState: function () {\n    this.model.trigger('form:clear-saving-state');\n    this.$el.removeClass('o-form-saving');\n  },\n\n  /**\n   * Toggles the visibility of the bottom button bar\n   * @private\n   */\n  __toggleToolbar: function () {\n    this.__toolbar && this.__toolbar.remove();\n\n    if (this.hasButtonBar() && this._editMode()) {\n      this.__toolbar = this.__createToolbar();\n      this.add(this.__toolbar, '');\n    }\n\n    this.trigger('resize');\n  },\n\n  /**\n   * Cancels this form\n   * - Reset the model to the previous state\n   * - Clears all errors\n   * - Triggers a `cancel` event\n   * - Sets the model to read mode (if applicable)\n   * @private\n   * @fires cancel\n   */\n  __cancel: function () {\n    const edit = this.model.get('__edit__');\n    /* eslint max-statements: [2, 12] */\n\n    this.model.clear({\n      silent: true\n    });\n    let data;\n\n    if (this.model.sanitizeAttributes) {\n      data = this.model.sanitizeAttributes(this.__originalModel);\n    } else {\n      data = oktaUnderscore.clone(this.__originalModel);\n    }\n\n    this.model.set(data, {\n      silent: true\n    });\n    this.trigger('cancel', this.model);\n    this.model.trigger('cache:clear');\n\n    if (edit) {\n      this.model.set('__edit__', false, {\n        silent: true\n      });\n      this.model.trigger('change:__edit__', this.model, false);\n    }\n\n    this.clearErrors();\n  },\n\n  /**\n   * Runs {@link module:Okta.Form#validate|validate} to check the model state.\n   * Triggers an \"invalid\" event on the model if validation fails\n   * @returns {Boolean}\n   */\n  isValid: function () {\n    let res;\n    const self = this;\n\n    function validateArray(arr) {\n      return oktaUnderscore.reduce(arr, function (memo, fieldName) {\n        return oktaUnderscore.extend(memo, self.model.validateField(fieldName));\n      }, {});\n    }\n\n    if (oktaUnderscore.isUndefined(this.validate)) {\n      return this.model.isValid();\n    } else if (oktaUnderscore.isFunction(this.validate)) {\n      res = this.validate();\n    } else if (oktaUnderscore.isArray(this.validate)) {\n      res = validateArray(this.validate);\n    } else if (this.validate === 'local') {\n      res = validateArray(this.getInputs().map(function (input) {\n        return input.options.name;\n      }));\n    }\n\n    if (!oktaUnderscore.isEmpty(res)) {\n      this.model.trigger('invalid', this.model, res);\n      return false;\n    } else {\n      return true;\n    }\n  },\n\n  /**\n   * A throttled function that saves the form not more than once every 100 ms\n   * Basically all this method does is trigger a `save` event\n   * @fires save\n   * @private\n   */\n  __save: function () {\n    this.clearErrors();\n\n    if (this.isValid()) {\n      this.trigger('save', this.model);\n    }\n  },\n\n  /**\n   * In the context of a wizard, go to previous state\n   * Technically all this method does is trigger a `previous` event\n   * @param  {Event} e\n   * @private\n   */\n  __previous: function () {\n    this.trigger('previous', this.model);\n  },\n\n  /**\n   * Renders the form in the correct mode based on the model.\n   * @private\n   */\n  __applyMode: function () {\n    this.clearErrors();\n\n    this.__toggleToolbar();\n\n    if (this._editMode()) {\n      this.$el.addClass('o-form-edit-mode');\n      this.$el.removeClass('o-form-read-mode');\n      this.$('.o-form-content').removeClass('rounded-btm-4');\n      this.focus();\n    } else {\n      this.$el.removeClass('o-form-edit-mode');\n      this.$el.addClass('o-form-read-mode');\n      this.$('.o-form-content').addClass('rounded-btm-4');\n    }\n  },\n\n  /**\n   * Is the form in edit mode\n   * @return {Boolean}\n   * @private\n   */\n  _editMode: function () {\n    return this.model.get('__edit__') || !this.hasReadMode();\n  },\n\n  /**\n   * Function can be overridden to alter top level error summary.\n   * @param {Object} responseJSON\n   *\n   * @example\n   * // responseJSON object\n   * {\n   *  errorCauses: [{errorSummary: \"At least one of Proxy Status, Location, or ASN should be configured.\"}]\n   *  errorSummary: \"At least one of Proxy Status, Location, or ASN should be configured.\"\n   *  errorCode: \"E0000001\"\n   *  errorId: \"oaepsrTCHrhT-eIi8XTm6KWWg\"\n   *  errorLink: \"E0000001\"\n   *  errorSummary: \"Api validation failed: networkZone\"\n   * }\n   *\n   * @method\n   * @default _.identity\n   */\n  parseErrorMessage: oktaUnderscore.identity,\n  _handleErrorScroll: function () {\n    if (!this.getAttribute('scrollOnError')) {\n      return;\n    }\n\n    const $el = oktaJQueryStatic('#' + this.id + ' .o-form-error-container');\n\n    if ($el.length) {\n      let $scrollContext = $el.scrollParent();\n      let scrollTop; // scrollParent was almost awesome...\n      // but it returns document if there are no other scrollable parents\n      // document does not have offset, so here we have to replace with html, body\n      // Additionally when the scroll context is html, body, $el.offset().top is fixed\n      // versus when it has a different scroll context it's dynamic and requires the\n      // calculation below.\n\n      if ($scrollContext[0] === document) {\n        $scrollContext = oktaJQueryStatic('html, body');\n        scrollTop = $el.offset().top;\n      } else {\n        scrollTop = $scrollContext.scrollTop() + $el.offset().top - $scrollContext.offset().top;\n      }\n\n      $scrollContext.animate({\n        scrollTop: scrollTop\n      }, 400);\n    }\n  },\n\n  /**\n   * Show an error message based on an XHR error\n   * @param  {Okta.BaseModel} model the model\n   * @param  {jqXHR} xhr The jQuery XmlHttpRequest Object\n   * @private\n   */\n  __showErrors: function (model, resp, showBanner) {\n    this.trigger('error', model);\n    /* eslint max-statements: 0 */\n\n    if (!this.getAttribute('showErrors')) {\n      return;\n    }\n\n    let errorSummary;\n    let responseJSON = ErrorParser.getResponseJSON(resp);\n    const validationErrors = ErrorParser.parseFieldErrors(resp); // trigger events for field validation errors\n\n    if (oktaUnderscore.size(validationErrors)) {\n      oktaUnderscore.each(validationErrors, function (errors, field) {\n        this.model.trigger('form:field-error', this.__errorFields[field] || field, oktaUnderscore.map(errors, function (error) {\n          return /^model\\.validation/.test(error) ? StringUtil.localize(error, 'courage') : error;\n        }));\n      }, this);\n    } else {\n      responseJSON = this.parseErrorMessage(responseJSON);\n      errorSummary = getErrorSummary(responseJSON);\n    } // show the error message\n\n\n    if (showBanner) {\n      this.$('.o-form-error-container').addClass('o-form-has-errors');\n      this.add(ErrorBanner, '.o-form-error-container', {\n        options: {\n          errorSummary: errorSummary\n        }\n      });\n    } // slide to and focus on the error message\n\n\n    this._handleErrorScroll();\n\n    this.model.trigger('form:resize');\n  },\n\n  /**\n   * Clears the error banner\n   * @private\n   */\n  clearErrors: function () {\n    this.$('.o-form-error-container').removeClass('o-form-has-errors');\n    this.model.trigger('form:clear-errors');\n    this.model.trigger('form:resize');\n  },\n\n  /**\n   * Toggles between edit and read mode\n   */\n  toggle: function () {\n    this.model.set('__edit__', !this.hasReadMode() || !this.model.get('__edit__'));\n    return this;\n  },\n  __addLayoutItem: function (input) {\n    if (InputFactory.supports(input)) {\n      this.addInput(input);\n    } else {\n      this.__addNonInputLayoutItem(input);\n    }\n  },\n  __addNonInputLayoutItem: function (item) {\n    const itemOptions = oktaUnderscore.omit(item, 'type');\n\n    switch (item.type) {\n      case 'sectionTitle':\n        this.addSectionTitle(item.title, oktaUnderscore.omit(itemOptions, 'title'));\n        break;\n\n      case 'divider':\n        this.addDivider(itemOptions);\n        break;\n\n      default:\n        throw new Error('unknown input: ' + item.type);\n    }\n  },\n\n  /**\n   * Adds a view to the buttons tool bar\n   * @param {Object} params parameterized button options\n   * @param {Object} options options to send to {@link module:Okta.View#add|View.add}\n   */\n  addButton: function (params, options) {\n    this.__toolbar && this.__toolbar.addButton(params, options);\n\n    this.__buttons.push([params, options]);\n  },\n\n  /**\n   * Adds a divider\n   */\n  addDivider: function (options) {\n    this.add('<div class=\"okta-form-divider form-divider\"></div>');\n    FormUtil.applyShowWhen(this.last(), options && options.showWhen);\n    FormUtil.applyToggleWhen(this.last(), options && options.toggleWhen);\n    return this;\n  },\n\n  /**\n   * Adds section header\n   * @param {String} title\n   */\n  addSectionTitle: function (title, options) {\n    this.add(sectionTitleTemplate({\n      title: title\n    }));\n    FormUtil.applyShowWhen(this.last(), options && options.showWhen);\n    FormUtil.applyToggleWhen(this.last(), options && options.toggleWhen);\n    return this;\n  },\n\n  /**\n   * Add a form input\n   * @param {Object} options Options to describe the input\n   * @param {String} options.type The input type.\n   * The options are: `text`, `textarea`, `select`, `checkbox`, `radio`, `switch`,\n   * `password`, `number`, `textselect`, `date`, `grouppicker`, `admingrouppicker`, `su-orgspicker`\n   * `file/image`, `file/cert`, `checkboxset`, `list`, `group`, `zonepicker`\n   * @param {String} options.name The name of the model field this input mutates\n   * @param {String|Function} [options.label]\n   * The input label text.\n   * When passed as a function, will invoke the function (in the context of the {@link InputLabel})\n   * on render time, and use the returned value.\n   * @param {String} [options.sublabel] The input sub label text\n   * @param {String} [options.tooltip] A popover tooltip to be displayed next to the label\n   * @param {String} [options.placeholder] Placeholder text.\n   * @param {String} [options.explain] Explanation text to render below the input\n   * @param {Okta.View} [options.customExplain] A custom view to render below the input (deprecated)\n   * @param {Boolean} [options.disabled=false] Make this input disabled\n   * @param {Boolean} [options.wide=false] Use a wide input layout\n   * @param {Boolean} [options.label-top=false] position label on top of an input\n   * @param {Boolean} [options.explain-top=false] position explain on top of an input (requires label-top=true)\n   * @param {Number} [options.multi] have multiple in-line inputs. useful when `input` is passed as an array of inputs\n   * @param {String} [options.errorField] The API error field here that maps to this input\n   * @param {Boolean} [options.inlineValidation=true] Validate input on focusout\n   * @param {String} [options.ariaLabel] Used to add aria-label attribute to the input when label is not present.\n   * @param {Boolean} [options.group=false] Grouping set of inputs using fieldset and legend. Mainly for radio\n   * @param {Object} [options.options]\n   * In the context of `radio` and `select`, a key/value set of options\n   *\n   * @param {Object} [options.params]\n   * Widget specific parameters. Varies per input.\n   *\n   * @param {BaseInput|Object[]} [options.input]\n   * - A custom input \"class\" or instance - preferably a **class**, so we can automagically assign the right\n   * parameters when initializing it\n   * - An array of input definition object literals (such as this one)\n   *\n   * @param {Object} [options.showWhen]\n   * Setting to define when to show (or hide) the input. The input is visible by default.\n   *\n   * @param {Object} [options.bindings]\n   * Bind a certain model attribute to a callback function, so the function is being called on render,\n   * and any time this model field changes.\n   * This is similar to `showWhen` but is not limited to toggling.\n   *\n   * @param {Function} [options.render]\n   * A post-render hook that will run upon render on InputWrapper\n   *\n   * @param {String|Function} className   A className to apply on the {@link InputWrapper}\n   *\n   * @param {Function} [options.initialize]\n   * An `initialize` function to run when initializing the {@link InputWrapper}\n   * Useful for state mutation on start time, and complex state logic\n   *\n   * @example\n   * // showhen: the field will be visible when `advanced` is set to `true`\n   * // and `mode` is set to `\"ON\"`.\n   * showWhen: {\n   *   'advanced': true,\n   *   'mode': function (value) {\n   *     return value == 'ON'; // this is identical to this.model.get('mode') == 'ON'\n   *   }\n   * }\n   *\n   * @example\n   * // bindings\n   * bindings: {\n   *   'status mode': function (status, mode) {\n   *      var labelView = this.getLabel();\n   *      if (status == 1) {\n   *        labelView.options.label = 'Something';\n   *      }\n   *      else {\n   *        labelView.options.label = mode;\n   *      }\n   *      labelView.render();\n   *   }\n   * }\n   */\n  addInput: function (_options) {\n    _options = oktaUnderscore.clone(_options);\n    FormUtil.validateInput(_options, this.model);\n    const inputsOptions = FormUtil.generateInputOptions(_options, this, this.__createInput).reverse(); // We need a local variable here to keep track\n    // as addInput can be called either directy or through the inputs array.\n\n    if (oktaUnderscore.isEmpty(this.getInputs().toArray())) {\n      oktaUnderscore.extend(inputsOptions[0], {\n        validateOnlyIfDirty: true\n      });\n    }\n\n    const inputs = oktaUnderscore.map(inputsOptions, this.__createInput, this);\n\n    oktaUnderscore.each(inputsOptions, function (input) {\n      if (input.errorField) {\n        this.__errorFields[input.errorField] = input.name;\n      }\n    }, this);\n\n    const options = {\n      inputId: oktaUnderscore.last(inputs).options.inputId,\n      input: inputs,\n      multi: inputsOptions.length > 1 ? inputsOptions.length : undefined\n    };\n\n    oktaUnderscore.extend(options, oktaUnderscore.omit(this.options, 'input'), oktaUnderscore.omit(_options, 'input'));\n\n    const inputWrapper = this.__createWrapper(options);\n\n    if (options.label !== false) {\n      inputWrapper.add(this.__createLabel(options));\n    }\n\n    inputWrapper.add(this._createContainer(options)); // TODO: there may be a bug here.\n    // options.input will always be an array, so options.input.type will always be undefined\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    /// @ts-ignore\n\n    inputWrapper.type = options.type || options.input.type || 'custom';\n    const args = [inputWrapper].concat(oktaUnderscore.rest(arguments));\n    return this.add.apply(this, args);\n  },\n\n  /**\n   * @private\n   */\n  __createInput: function (options) {\n    options = oktaUnderscore.pick(options, FormUtil.INPUT_OPTIONS);\n    return InputFactory.create(options);\n  },\n\n  /**\n   * @private\n   */\n  __createWrapper: function (options) {\n    options = oktaUnderscore.pick(options, FormUtil.WRAPPER_OPTIONS);\n    return new InputWrapper(options);\n  },\n\n  /**\n   * @private\n   */\n  __createLabel: function (options) {\n    options = oktaUnderscore.pick(options, FormUtil.LABEL_OPTIONS);\n    return new InputLabel(options);\n  },\n\n  /**\n   * @private\n   */\n  _createContainer: function (options) {\n    options = oktaUnderscore.pick(options, FormUtil.CONTAINER_OPTIONS);\n    return new InputContainer(options);\n  },\n\n  /**\n   * Stores the current attributes of the model to a private property\n   * @param  {Okta.BaseModel} model The model\n   * @private\n   */\n  __saveModelState: function (model) {\n    this.__originalModel = oktaJQueryStatic.extend(true, {}, model.attributes);\n  },\n\n  /**\n   * @override\n   * @ignore\n   */\n  add: function (...args) {\n    // sets a default element selector\n    typeof args[1] === 'undefined' && (args[1] = '> div.o-form-content > .o-form-fieldset-container');\n    return BaseView.prototype.add.apply(this, args);\n  },\n\n  /**\n   * Set the focus on the first input in the form\n   */\n  focus: function () {\n    const first = this.getInputs().first();\n\n    if (first && first.focus) {\n      first.focus();\n    }\n\n    return this;\n  },\n\n  /**\n   * Disable all inputs in the form\n   * @deprecated not currently in use\n   */\n  disable: function () {\n    this.invoke('disable');\n    return this;\n  },\n\n  /**\n   * Enable all inputs in the form\n   * @deprecated not currently in use\n   */\n  enable: function () {\n    this.invoke('enable');\n  },\n\n  /**\n   * Set the max-height for o-form-content class container within the form if a height is provided,\n   * otherwise, get its computed inner height\n   * @param {Number} the height in pixel to set for class o-form-content\n   * @return {Number}\n   */\n  contentHeight: function (height) {\n    const content = this.$('.o-form-content');\n\n    if (oktaUnderscore.isNumber(height)) {\n      content.css('max-height', height);\n    } else {\n      return content.height();\n    }\n  },\n\n  /**\n   * Get only the input children\n   * @return {InputWrapper[]} An underscore wrapped array of {@link InputWrapper} instances\n   */\n  getInputs: function () {\n    return oktaUnderscore(this.filter(function (view) {\n      return view instanceof InputWrapper;\n    }));\n  }\n});\n\nexport { BaseForm as default };\n","import $ from 'jquery';\n\n(function () {\n  var SelectParser;\n\n  SelectParser = function () {\n    function SelectParser() {\n      this.options_index = 0;\n      this.parsed = [];\n    }\n\n    SelectParser.prototype.add_node = function (child) {\n      if (child.nodeName.toUpperCase() === \"OPTGROUP\") {\n        return this.add_group(child);\n      } else {\n        return this.add_option(child);\n      }\n    };\n\n    SelectParser.prototype.add_group = function (group) {\n      var group_position, option, _i, _len, _ref, _results;\n\n      group_position = this.parsed.length;\n      this.parsed.push({\n        array_index: group_position,\n        group: true,\n        label: group.label,\n        children: 0,\n        disabled: group.disabled\n      });\n      _ref = group.childNodes;\n      _results = [];\n\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        option = _ref[_i];\n\n        _results.push(this.add_option(option, group_position, group.disabled));\n      }\n\n      return _results;\n    };\n\n    SelectParser.prototype.add_option = function (option, group_position, group_disabled) {\n      if (option.nodeName.toUpperCase() === \"OPTION\") {\n        if (option.text !== \"\") {\n          if (group_position != null) {\n            this.parsed[group_position].children += 1;\n          }\n\n          this.parsed.push({\n            array_index: this.parsed.length,\n            options_index: this.options_index,\n            value: option.value,\n            text: option.text,\n            html: option.innerHTML,\n            selected: option.selected,\n            disabled: group_disabled === true ? group_disabled : option.disabled,\n            group_array_index: group_position,\n            classes: option.className,\n            style: option.style.cssText\n          });\n        } else {\n          this.parsed.push({\n            array_index: this.parsed.length,\n            options_index: this.options_index,\n            empty: true\n          });\n        }\n\n        return this.options_index += 1;\n      }\n    };\n\n    return SelectParser;\n  }();\n\n  SelectParser.select_to_array = function (select) {\n    var child, parser, _i, _len, _ref;\n\n    parser = new SelectParser();\n    _ref = select.childNodes;\n\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      child = _ref[_i];\n      parser.add_node(child);\n    }\n\n    return parser.parsed;\n  };\n\n  this.SelectParser = SelectParser;\n}).call($);\n(function () {\n  var AbstractChosen, root;\n  root = this;\n\n  AbstractChosen = function () {\n    function AbstractChosen(form_field, options) {\n      this.form_field = form_field;\n      this.options = options != null ? options : {};\n\n      if (!AbstractChosen.browser_is_supported()) {\n        return;\n      }\n\n      this.is_multiple = this.form_field.multiple;\n      this.set_default_text();\n      this.set_default_values();\n      this.setup();\n      this.set_up_html();\n      this.register_observers();\n      this.finish_setup();\n    }\n\n    AbstractChosen.prototype.set_default_values = function () {\n      var _this = this;\n\n      this.click_test_action = function (evt) {\n        return _this.test_active_click(evt);\n      };\n\n      this.activate_action = function (evt) {\n        return _this.activate_field(evt);\n      };\n\n      this.active_field = false;\n      this.mouse_on_container = false;\n      this.results_showing = false;\n      this.result_highlighted = null;\n      this.result_single_selected = null;\n      this.allow_single_deselect = this.options.allow_single_deselect != null && this.form_field.options[0] != null && this.form_field.options[0].text === \"\" ? this.options.allow_single_deselect : false;\n      this.disable_search_threshold = this.options.disable_search_threshold || 0;\n      this.disable_search = this.options.disable_search || false;\n      this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;\n      this.search_contains = this.options.search_contains || false;\n      this.single_backstroke_delete = this.options.single_backstroke_delete || false;\n      this.max_selected_options = this.options.max_selected_options || Infinity;\n      return this.inherit_select_classes = this.options.inherit_select_classes || false;\n    };\n\n    AbstractChosen.prototype.set_default_text = function () {\n      if (this.form_field.getAttribute(\"data-placeholder\")) {\n        this.default_text = this.form_field.getAttribute(\"data-placeholder\");\n      } else if (this.is_multiple) {\n        this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;\n      } else {\n        this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;\n      }\n\n      return this.results_none_found = this.form_field.getAttribute(\"data-no_results_text\") || this.options.no_results_text || AbstractChosen.default_no_result_text;\n    };\n\n    AbstractChosen.prototype.mouse_enter = function () {\n      return this.mouse_on_container = true;\n    };\n\n    AbstractChosen.prototype.mouse_leave = function () {\n      return this.mouse_on_container = false;\n    };\n\n    AbstractChosen.prototype.input_focus = function (evt) {\n      var _this = this;\n\n      if (this.is_multiple) {\n        if (!this.active_field) {\n          return setTimeout(function () {\n            return _this.container_mousedown();\n          }, 50);\n        }\n      } else {\n        if (!this.active_field) {\n          return this.activate_field();\n        }\n      }\n    };\n\n    AbstractChosen.prototype.input_blur = function (evt) {\n      var _this = this;\n\n      if (!this.mouse_on_container) {\n        this.active_field = false;\n        return setTimeout(function () {\n          return _this.blur_test();\n        }, 100);\n      }\n    };\n\n    AbstractChosen.prototype.result_add_option = function (option) {\n      var classes, style;\n      option.dom_id = this.container_id + \"_o_\" + option.array_index;\n      classes = [];\n\n      if (!option.disabled && !(option.selected && this.is_multiple)) {\n        classes.push(\"active-result\");\n      }\n\n      if (option.disabled && !(option.selected && this.is_multiple)) {\n        classes.push(\"disabled-result\");\n      }\n\n      if (option.selected) {\n        classes.push(\"result-selected\");\n      }\n\n      if (option.group_array_index != null) {\n        classes.push(\"group-option\");\n      }\n\n      if (option.classes !== \"\") {\n        classes.push(option.classes);\n      }\n\n      style = option.style.cssText !== \"\" && option.style !== \"\" ? \" style=\\\"\" + option.style + \"\\\"\" : \"\";\n      return \"<li id=\\\"\" + option.dom_id + \"\\\" class=\\\"\" + classes.join(\" \") + \"\\\"\" + style + \">\" + option.html + \"</li>\";\n    };\n\n    AbstractChosen.prototype.results_update_field = function () {\n      this.set_default_text();\n\n      if (!this.is_multiple) {\n        this.results_reset_cleanup();\n      }\n\n      this.result_clear_highlight();\n      this.result_single_selected = null;\n      return this.results_build();\n    };\n\n    AbstractChosen.prototype.results_toggle = function () {\n      if (this.results_showing) {\n        return this.results_hide();\n      } else {\n        return this.results_show();\n      }\n    };\n\n    AbstractChosen.prototype.results_search = function (evt) {\n      if (this.results_showing) {\n        return this.winnow_results();\n      } else {\n        return this.results_show();\n      }\n    };\n\n    AbstractChosen.prototype.choices_count = function () {\n      var option, _i, _len, _ref;\n\n      if (this.selected_option_count != null) {\n        return this.selected_option_count;\n      }\n\n      this.selected_option_count = 0;\n      _ref = this.form_field.options;\n\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        option = _ref[_i];\n\n        if (option.selected) {\n          this.selected_option_count += 1;\n        }\n      }\n\n      return this.selected_option_count;\n    };\n\n    AbstractChosen.prototype.choices_click = function (evt) {\n      evt.preventDefault();\n\n      if (!(this.results_showing || this.is_disabled)) {\n        return this.results_show();\n      }\n    };\n\n    AbstractChosen.prototype.keyup_checker = function (evt) {\n      var stroke, _ref;\n\n      stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;\n      this.search_field_scale();\n\n      switch (stroke) {\n        case 8:\n          if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {\n            return this.keydown_backstroke();\n          } else if (!this.pending_backstroke) {\n            this.result_clear_highlight();\n            return this.results_search();\n          }\n\n          break;\n\n        case 13:\n          evt.preventDefault();\n\n          if (this.results_showing) {\n            return this.result_select(evt);\n          }\n\n          break;\n\n        case 27:\n          if (this.results_showing) {\n            this.results_hide();\n          }\n\n          return true;\n\n        case 9:\n        case 38:\n        case 40:\n        case 16:\n        case 91:\n        case 17:\n          break;\n\n        default:\n          return this.results_search();\n      }\n    };\n\n    AbstractChosen.prototype.generate_field_id = function () {\n      var new_id;\n      new_id = this.generate_random_id();\n      this.form_field.id = new_id;\n      return new_id;\n    };\n\n    AbstractChosen.prototype.generate_random_char = function () {\n      var chars, rand;\n      chars = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n      rand = Math.floor(Math.random() * chars.length);\n      return chars.substring(rand, rand + 1);\n    };\n\n    AbstractChosen.prototype.container_width = function () {\n      if (this.options.width != null) {\n        return this.options.width;\n      } else {\n        return \"\" + this.form_field.offsetWidth + \"px\";\n      }\n    };\n\n    AbstractChosen.browser_is_supported = function () {\n      var _ref;\n\n      if (window.navigator.appName === \"Microsoft Internet Explorer\") {\n        return null !== (_ref = document.documentMode) && _ref >= 8;\n      }\n\n      return true;\n    };\n\n    AbstractChosen.default_multiple_text = \"Select Some Options\";\n    AbstractChosen.default_single_text = \"Select an Option\";\n    AbstractChosen.default_no_result_text = \"No results match\";\n    return AbstractChosen;\n  }();\n\n  root.AbstractChosen = AbstractChosen;\n}).call($);\n(function () {\n  var $$1,\n      Chosen,\n      root,\n      _ref,\n      __hasProp = {}.hasOwnProperty,\n      __extends = function (child, parent) {\n    for (var key in parent) {\n      if (__hasProp.call(parent, key)) child[key] = parent[key];\n    }\n\n    function ctor() {\n      this.constructor = child;\n    }\n\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n    child.__super__ = parent.prototype;\n    return child;\n  };\n\n  root = this;\n  var AbstractChosen = root.AbstractChosen;\n  $$1 = $;\n  $$1.fn.extend({\n    chosen: function (options) {\n      if (!AbstractChosen.browser_is_supported()) {\n        return this;\n      }\n\n      return this.each(function (input_field) {\n        var $this;\n        $this = $$1(this);\n\n        if (!$this.hasClass(\"chzn-done\")) {\n          return $this.data(\"chosen\", new Chosen(this, options));\n        }\n      });\n    }\n  });\n\n  Chosen = function (_super) {\n    __extends(Chosen, _super);\n\n    function Chosen() {\n      _ref = Chosen.__super__.constructor.apply(this, arguments);\n      return _ref;\n    }\n\n    Chosen.prototype.setup = function () {\n      this.form_field_jq = $$1(this.form_field);\n      this.current_selectedIndex = this.form_field.selectedIndex;\n      return this.is_rtl = this.form_field_jq.hasClass(\"chzn-rtl\");\n    };\n\n    Chosen.prototype.finish_setup = function () {\n      return this.form_field_jq.addClass(\"chzn-done\");\n    };\n\n    Chosen.prototype.set_up_html = function () {\n      var container_classes, container_props;\n      this.container_id = this.form_field.id.length ? this.form_field.id.replace(/[^\\w]/g, \"_\") : this.generate_field_id();\n      this.container_id += \"_chzn\";\n      container_classes = [\"chzn-container\"];\n      container_classes.push(\"chzn-container-\" + (this.is_multiple ? \"multi\" : \"single\"));\n\n      if (this.inherit_select_classes && this.form_field.className) {\n        container_classes.push(this.form_field.className);\n      }\n\n      if (this.is_rtl) {\n        container_classes.push(\"chzn-rtl\");\n      }\n\n      container_props = {\n        \"id\": this.container_id,\n        \"class\": container_classes.join(\" \"),\n        \"title\": this.form_field.title\n      };\n      this.container = $$1(\"<div></div>\", container_props);\n      this.container[0].style.width = this.container_width();\n\n      if (this.is_multiple) {\n        this.container.html(\"<ul class=\\\"chzn-choices\\\"><li class=\\\"search-field\\\"><input type=\\\"text\\\" value=\\\"\" + this.default_text + \"\\\" class=\\\"default\\\" autocomplete=\\\"off\\\" style=\\\"width:25px;\\\" /></li></ul><div class=\\\"chzn-drop\\\"><ul class=\\\"chzn-results\\\"></ul></div>\");\n      } else {\n        this.container.html(\"<a href=\\\"#\\\" class=\\\"chzn-single chzn-default\\\" tabindex=\\\"-1\\\"><span>\" + this.default_text + \"</span><div><b></b></div></a><div class=\\\"chzn-drop\\\"><div class=\\\"chzn-search\\\"><input type=\\\"text\\\" autocomplete=\\\"off\\\" /></div><ul class=\\\"chzn-results\\\"></ul></div>\");\n      }\n\n      this.form_field_jq.hide().after(this.container);\n      this.dropdown = this.container.find(\"div.chzn-drop\").first();\n      this.search_field = this.container.find(\"input\").first();\n      this.search_results = this.container.find(\"ul.chzn-results\").first();\n      this.search_field_scale();\n      this.search_no_results = this.container.find(\"li.no-results\").first();\n\n      if (this.is_multiple) {\n        this.search_choices = this.container.find(\"ul.chzn-choices\").first();\n        this.search_container = this.container.find(\"li.search-field\").first();\n      } else {\n        this.search_container = this.container.find(\"div.chzn-search\").first();\n        this.selected_item = this.container.find(\".chzn-single\").first();\n      }\n\n      this.results_build();\n      this.set_tab_index();\n      this.set_label_behavior();\n      return this.form_field_jq.trigger(\"liszt:ready\", {\n        chosen: this\n      });\n    };\n\n    Chosen.prototype.register_observers = function () {\n      var _this = this;\n\n      this.container.mousedown(function (evt) {\n        _this.container_mousedown(evt);\n      });\n      this.container.mouseup(function (evt) {\n        _this.container_mouseup(evt);\n      });\n      this.container.mouseenter(function (evt) {\n        _this.mouse_enter(evt);\n      });\n      this.container.mouseleave(function (evt) {\n        _this.mouse_leave(evt);\n      });\n      this.search_results.mouseup(function (evt) {\n        _this.search_results_mouseup(evt);\n      });\n      this.search_results.mouseover(function (evt) {\n        _this.search_results_mouseover(evt);\n      });\n      this.search_results.mouseout(function (evt) {\n        _this.search_results_mouseout(evt);\n      });\n      this.search_results.bind(\"mousewheel DOMMouseScroll\", function (evt) {\n        _this.search_results_mousewheel(evt);\n      });\n      this.form_field_jq.bind(\"liszt:updated\", function (evt) {\n        _this.results_update_field(evt);\n      });\n      this.form_field_jq.bind(\"liszt:activate\", function (evt) {\n        _this.activate_field(evt);\n      });\n      this.form_field_jq.bind(\"liszt:open\", function (evt) {\n        _this.container_mousedown(evt);\n      });\n      this.search_field.blur(function (evt) {\n        _this.input_blur(evt);\n      });\n      this.search_field.keyup(function (evt) {\n        _this.keyup_checker(evt);\n      });\n      this.search_field.keydown(function (evt) {\n        _this.keydown_checker(evt);\n      });\n      this.search_field.focus(function (evt) {\n        _this.input_focus(evt);\n      });\n\n      if (this.is_multiple) {\n        return this.search_choices.click(function (evt) {\n          _this.choices_click(evt);\n        });\n      } else {\n        return this.container.click(function (evt) {\n          evt.preventDefault();\n        });\n      }\n    };\n\n    Chosen.prototype.search_field_disabled = function () {\n      this.is_disabled = this.form_field_jq[0].disabled;\n\n      if (this.is_disabled) {\n        this.container.addClass(\"chzn-disabled\");\n        this.search_field[0].disabled = true;\n\n        if (!this.is_multiple) {\n          this.selected_item.unbind(\"focus\", this.activate_action);\n        }\n\n        return this.close_field();\n      } else {\n        this.container.removeClass(\"chzn-disabled\");\n        this.search_field[0].disabled = false;\n\n        if (!this.is_multiple) {\n          return this.selected_item.bind(\"focus\", this.activate_action);\n        }\n      }\n    };\n\n    Chosen.prototype.container_mousedown = function (evt) {\n      if (!this.is_disabled) {\n        if (evt && evt.type === \"mousedown\" && !this.results_showing) {\n          evt.preventDefault();\n        }\n\n        if (!(evt != null && $$1(evt.target).hasClass(\"search-choice-close\"))) {\n          if (!this.active_field) {\n            if (this.is_multiple) {\n              this.search_field.val(\"\");\n            }\n\n            $$1(document).click(this.click_test_action);\n            this.results_show();\n          } else if (!this.is_multiple && evt && ($$1(evt.target)[0] === this.selected_item[0] || $$1(evt.target).parents(\"a.chzn-single\").length)) {\n            evt.preventDefault();\n            this.results_toggle();\n          }\n\n          return this.activate_field();\n        }\n      }\n    };\n\n    Chosen.prototype.container_mouseup = function (evt) {\n      if (evt.target.nodeName === \"ABBR\" && !this.is_disabled) {\n        return this.results_reset(evt);\n      }\n    };\n\n    Chosen.prototype.search_results_mousewheel = function (evt) {\n      var delta, _ref1, _ref2;\n\n      delta = -((_ref1 = evt.originalEvent) != null ? _ref1.wheelDelta : void 0) || ((_ref2 = evt.originialEvent) != null ? _ref2.detail : void 0);\n\n      if (delta != null) {\n        evt.preventDefault();\n\n        if (evt.type === \"DOMMouseScroll\") {\n          delta = delta * 40;\n        }\n\n        return this.search_results.scrollTop(delta + this.search_results.scrollTop());\n      }\n    };\n\n    Chosen.prototype.blur_test = function (evt) {\n      if (!this.active_field && this.container.hasClass(\"chzn-container-active\")) {\n        return this.close_field();\n      }\n    };\n\n    Chosen.prototype.close_field = function () {\n      $$1(document).unbind(\"click\", this.click_test_action);\n      this.active_field = false;\n      this.results_hide();\n      this.container.removeClass(\"chzn-container-active\");\n      this.clear_backstroke();\n      this.show_search_field_default();\n      return this.search_field_scale();\n    };\n\n    Chosen.prototype.activate_field = function () {\n      this.container.addClass(\"chzn-container-active\");\n      this.active_field = true;\n      this.search_field.val(this.search_field.val());\n      return this.search_field.focus();\n    };\n\n    Chosen.prototype.test_active_click = function (evt) {\n      if ($$1(evt.target).parents(\"#\" + this.container_id).length) {\n        return this.active_field = true;\n      } else {\n        return this.close_field();\n      }\n    };\n\n    Chosen.prototype.results_build = function () {\n      var content, data, _i, _len, _ref1;\n\n      this.parsing = true;\n      this.selected_option_count = null;\n      this.results_data = root.SelectParser.select_to_array(this.form_field);\n\n      if (this.is_multiple) {\n        this.search_choices.find(\"li.search-choice\").remove();\n      } else if (!this.is_multiple) {\n        this.selected_item.addClass(\"chzn-default\").find(\"span\").text(this.default_text);\n\n        if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {\n          this.search_field[0].readOnly = true;\n          this.container.addClass(\"chzn-container-single-nosearch\");\n        } else {\n          this.search_field[0].readOnly = false;\n          this.container.removeClass(\"chzn-container-single-nosearch\");\n        }\n      }\n\n      content = \"\";\n      _ref1 = this.results_data;\n\n      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n        data = _ref1[_i];\n\n        if (data.group) {\n          content += this.result_add_group(data);\n        } else if (!data.empty) {\n          content += this.result_add_option(data);\n\n          if (data.selected && this.is_multiple) {\n            this.choice_build(data);\n          } else if (data.selected && !this.is_multiple) {\n            this.selected_item.removeClass(\"chzn-default\").find(\"span\").text(data.text);\n\n            if (this.allow_single_deselect) {\n              this.single_deselect_control_build();\n            }\n          }\n        }\n      }\n\n      this.search_field_disabled();\n      this.show_search_field_default();\n      this.search_field_scale();\n      this.search_results.html(content);\n      return this.parsing = false;\n    };\n\n    Chosen.prototype.result_add_group = function (group) {\n      group.dom_id = this.container_id + \"_g_\" + group.array_index;\n      return \"<li id=\\\"\" + group.dom_id + \"\\\" class=\\\"group-result\\\">\" + $$1(\"<div></div>\").text(group.label).html() + \"</li>\";\n    };\n\n    Chosen.prototype.result_do_highlight = function (el) {\n      var high_bottom, high_top, maxHeight, visible_bottom, visible_top;\n\n      if (el.length) {\n        this.result_clear_highlight();\n        this.result_highlight = el;\n        this.result_highlight.addClass(\"highlighted\");\n        maxHeight = parseInt(this.search_results.css(\"maxHeight\"), 10);\n        visible_top = this.search_results.scrollTop();\n        visible_bottom = maxHeight + visible_top;\n        high_top = this.result_highlight.position().top + this.search_results.scrollTop();\n        high_bottom = high_top + this.result_highlight.outerHeight();\n\n        if (high_bottom >= visible_bottom) {\n          return this.search_results.scrollTop(high_bottom - maxHeight > 0 ? high_bottom - maxHeight : 0);\n        } else if (high_top < visible_top) {\n          return this.search_results.scrollTop(high_top);\n        }\n      }\n    };\n\n    Chosen.prototype.result_clear_highlight = function () {\n      if (this.result_highlight) {\n        this.result_highlight.removeClass(\"highlighted\");\n      }\n\n      return this.result_highlight = null;\n    };\n\n    Chosen.prototype.results_show = function () {\n      if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n        this.form_field_jq.trigger(\"liszt:maxselected\", {\n          chosen: this\n        });\n        return false;\n      }\n\n      this.container.addClass(\"chzn-with-drop\");\n      this.form_field_jq.trigger(\"liszt:showing_dropdown\", {\n        chosen: this\n      });\n      this.results_showing = true;\n      this.search_field.focus();\n      this.search_field.val(this.search_field.val());\n      return this.winnow_results();\n    };\n\n    Chosen.prototype.results_hide = function () {\n      if (this.results_showing) {\n        this.result_clear_highlight();\n        this.container.removeClass(\"chzn-with-drop\");\n        this.form_field_jq.trigger(\"liszt:hiding_dropdown\", {\n          chosen: this\n        });\n      }\n\n      return this.results_showing = false;\n    };\n\n    Chosen.prototype.set_tab_index = function (el) {\n      var ti;\n\n      if (this.form_field_jq.attr(\"tabindex\")) {\n        ti = this.form_field_jq.attr(\"tabindex\");\n        this.form_field_jq.attr(\"tabindex\", -1);\n        return this.search_field.attr(\"tabindex\", ti);\n      }\n    };\n\n    Chosen.prototype.set_label_behavior = function () {\n      var _this = this;\n\n      this.form_field_label = this.form_field_jq.parents(\"label\");\n\n      if (!this.form_field_label.length && this.form_field.id.length) {\n        this.form_field_label = $$1(\"label[for='\" + this.form_field.id + \"']\");\n      }\n\n      if (this.form_field_label.length > 0) {\n        return this.form_field_label.click(function (evt) {\n          if (_this.is_multiple) {\n            return _this.container_mousedown(evt);\n          } else {\n            return _this.activate_field();\n          }\n        });\n      }\n    };\n\n    Chosen.prototype.show_search_field_default = function () {\n      if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {\n        this.search_field.val(this.default_text);\n        return this.search_field.addClass(\"default\");\n      } else {\n        this.search_field.val(\"\");\n        return this.search_field.removeClass(\"default\");\n      }\n    };\n\n    Chosen.prototype.search_results_mouseup = function (evt) {\n      var target;\n      target = $$1(evt.target).hasClass(\"active-result\") ? $$1(evt.target) : $$1(evt.target).parents(\".active-result\").first();\n\n      if (target.length) {\n        this.result_highlight = target;\n        this.result_select(evt);\n        return this.search_field.focus();\n      }\n    };\n\n    Chosen.prototype.search_results_mouseover = function (evt) {\n      var target;\n      target = $$1(evt.target).hasClass(\"active-result\") ? $$1(evt.target) : $$1(evt.target).parents(\".active-result\").first();\n\n      if (target) {\n        return this.result_do_highlight(target);\n      }\n    };\n\n    Chosen.prototype.search_results_mouseout = function (evt) {\n      if ($$1(evt.target).hasClass(\"active-result\" )) {\n        return this.result_clear_highlight();\n      }\n    };\n\n    Chosen.prototype.choice_build = function (item) {\n      var choice,\n          close_link,\n          _this = this;\n\n      choice = $$1(\"<li></li>\", {\n        \"class\": \"search-choice\"\n      }).html(\"<span>\" + item.html + \"</span>\");\n\n      if (item.disabled) {\n        choice.addClass(\"search-choice-disabled\");\n      } else {\n        close_link = $$1(\"<a></a>\", {\n          href: \"#\",\n          \"class\": \"search-choice-close\",\n          rel: item.array_index\n        });\n        close_link.click(function (evt) {\n          return _this.choice_destroy_link_click(evt);\n        });\n        choice.append(close_link);\n      }\n\n      return this.search_container.before(choice);\n    };\n\n    Chosen.prototype.choice_destroy_link_click = function (evt) {\n      evt.preventDefault();\n      evt.stopPropagation();\n\n      if (!this.is_disabled) {\n        return this.choice_destroy($$1(evt.target));\n      }\n    };\n\n    Chosen.prototype.choice_destroy = function (link) {\n      if (this.result_deselect(link.attr(\"rel\"))) {\n        this.show_search_field_default();\n\n        if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {\n          this.results_hide();\n        }\n\n        link.parents(\"li\").first().remove();\n        return this.search_field_scale();\n      }\n    };\n\n    Chosen.prototype.results_reset = function () {\n      this.form_field.options[0].selected = true;\n      this.selected_option_count = null;\n      this.selected_item.find(\"span\").text(this.default_text);\n\n      if (!this.is_multiple) {\n        this.selected_item.addClass(\"chzn-default\");\n      }\n\n      this.show_search_field_default();\n      this.results_reset_cleanup();\n      this.form_field_jq.trigger(\"change\");\n\n      if (this.active_field) {\n        return this.results_hide();\n      }\n    };\n\n    Chosen.prototype.results_reset_cleanup = function () {\n      this.current_selectedIndex = this.form_field.selectedIndex;\n      return this.selected_item.find(\"abbr\").remove();\n    };\n\n    Chosen.prototype.result_select = function (evt) {\n      var high, high_id, item, position;\n\n      if (this.result_highlight) {\n        high = this.result_highlight;\n        high_id = high.attr(\"id\");\n        this.result_clear_highlight();\n\n        if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n          this.form_field_jq.trigger(\"liszt:maxselected\", {\n            chosen: this\n          });\n          return false;\n        }\n\n        if (this.is_multiple) {\n          high.removeClass(\"active-result\");\n        } else {\n          this.search_results.find(\".result-selected\").removeClass(\"result-selected\");\n          this.result_single_selected = high;\n          this.selected_item.removeClass(\"chzn-default\");\n        }\n\n        high.addClass(\"result-selected\");\n        position = high_id.substr(high_id.lastIndexOf(\"_\") + 1);\n        item = this.results_data[position];\n        item.selected = true;\n        this.form_field.options[item.options_index].selected = true;\n        this.selected_option_count = null;\n\n        if (this.is_multiple) {\n          this.choice_build(item);\n        } else {\n          this.selected_item.find(\"span\").first().text(item.text);\n\n          if (this.allow_single_deselect) {\n            this.single_deselect_control_build();\n          }\n        }\n\n        if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {\n          this.results_hide();\n        }\n\n        this.search_field.val(\"\");\n\n        if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {\n          this.form_field_jq.trigger(\"change\", {\n            \"selected\": this.form_field.options[item.options_index].value\n          });\n        }\n\n        this.current_selectedIndex = this.form_field.selectedIndex;\n        return this.search_field_scale();\n      }\n    };\n\n    Chosen.prototype.result_activate = function (el, option) {\n      if (option.disabled) {\n        return el.addClass(\"disabled-result\");\n      } else if (this.is_multiple && option.selected) {\n        return el.addClass(\"result-selected\");\n      } else {\n        return el.addClass(\"active-result\");\n      }\n    };\n\n    Chosen.prototype.result_deactivate = function (el) {\n      return el.removeClass(\"active-result result-selected disabled-result\");\n    };\n\n    Chosen.prototype.result_deselect = function (pos) {\n      var result, result_data;\n      result_data = this.results_data[pos];\n\n      if (!this.form_field.options[result_data.options_index].disabled) {\n        result_data.selected = false;\n        this.form_field.options[result_data.options_index].selected = false;\n        this.selected_option_count = null;\n        result = $$1(\"#\" + this.container_id + \"_o_\" + pos);\n        result.removeClass(\"result-selected\").addClass(\"active-result\").show();\n        this.result_clear_highlight();\n        this.winnow_results();\n        this.form_field_jq.trigger(\"change\", {\n          deselected: this.form_field.options[result_data.options_index].value\n        });\n        this.search_field_scale();\n        return true;\n      } else {\n        return false;\n      }\n    };\n\n    Chosen.prototype.single_deselect_control_build = function () {\n      if (!this.allow_single_deselect) {\n        return;\n      }\n\n      if (!this.selected_item.find(\"abbr\").length) {\n        this.selected_item.find(\"span\").first().after(\"<abbr class=\\\"search-choice-close\\\"></abbr>\");\n      }\n\n      return this.selected_item.addClass(\"chzn-single-with-deselect\");\n    };\n\n    Chosen.prototype.winnow_results = function () {\n      var found, option, part, parts, regex, regexAnchor, result, result_id, results, searchText, startpos, text, zregex, _i, _j, _len, _len1, _ref1;\n\n      this.no_results_clear();\n      results = 0;\n      searchText = this.search_field.val() === this.default_text ? \"\" : $$1(\"<div></div>\").text($$1.trim(this.search_field.val())).html();\n      regexAnchor = this.search_contains ? \"\" : \"^\";\n      regex = new RegExp(regexAnchor + searchText.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\"), \"i\");\n      zregex = new RegExp(searchText.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\"), \"i\");\n      _ref1 = this.results_data;\n\n      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n        option = _ref1[_i];\n\n        if (!option.empty) {\n          if (option.group) {\n            $$1(\"#\" + option.dom_id).css(\"display\", \"none\");\n          } else {\n            found = false;\n            result_id = option.dom_id;\n            result = $$1(\"#\" + result_id);\n\n            if (regex.test(option.html)) {\n              found = true;\n              results += 1;\n            } else if (this.enable_split_word_search && (option.html.indexOf(\" \") >= 0 || option.html.indexOf(\"[\") === 0)) {\n              parts = option.html.replace(/\\[|\\]/g, \"\").split(\" \");\n\n              if (parts.length) {\n                for (_j = 0, _len1 = parts.length; _j < _len1; _j++) {\n                  part = parts[_j];\n\n                  if (regex.test(part)) {\n                    found = true;\n                    results += 1;\n                  }\n                }\n              }\n            }\n\n            if (found) {\n              if (searchText.length) {\n                startpos = option.html.search(zregex);\n                text = option.html.substr(0, startpos + searchText.length) + \"</em>\" + option.html.substr(startpos + searchText.length);\n                text = text.substr(0, startpos) + \"<em>\" + text.substr(startpos);\n              } else {\n                text = option.html;\n              }\n\n              result.html(text);\n              this.result_activate(result, option);\n\n              if (option.group_array_index != null) {\n                $$1(\"#\" + this.results_data[option.group_array_index].dom_id).css(\"display\", \"list-item\");\n              }\n            } else {\n              if (this.result_highlight && result_id === this.result_highlight.attr(\"id\")) {\n                this.result_clear_highlight();\n              }\n\n              this.result_deactivate(result);\n            }\n          }\n        }\n      }\n\n      if (results < 1 && searchText.length) {\n        return this.no_results(searchText);\n      } else {\n        return this.winnow_results_set_highlight();\n      }\n    };\n\n    Chosen.prototype.winnow_results_set_highlight = function () {\n      var do_high, selected_results;\n\n      if (!this.result_highlight) {\n        selected_results = !this.is_multiple ? this.search_results.find(\".result-selected.active-result\") : [];\n        do_high = selected_results.length ? selected_results.first() : this.search_results.find(\".active-result\").first();\n\n        if (do_high != null) {\n          return this.result_do_highlight(do_high);\n        }\n      }\n    };\n\n    Chosen.prototype.no_results = function (terms) {\n      var no_results_html;\n      no_results_html = $$1(\"<li class=\\\"no-results\\\">\" + this.results_none_found + \" \\\"<span></span>\\\"</li>\");\n      no_results_html.find(\"span\").first().html(terms);\n      return this.search_results.append(no_results_html);\n    };\n\n    Chosen.prototype.no_results_clear = function () {\n      return this.search_results.find(\".no-results\").remove();\n    };\n\n    Chosen.prototype.keydown_arrow = function () {\n      var next_sib;\n\n      if (this.results_showing && this.result_highlight) {\n        next_sib = this.result_highlight.nextAll(\"li.active-result\").first();\n\n        if (next_sib) {\n          return this.result_do_highlight(next_sib);\n        }\n      } else {\n        return this.results_show();\n      }\n    };\n\n    Chosen.prototype.keyup_arrow = function () {\n      var prev_sibs;\n\n      if (!this.results_showing && !this.is_multiple) {\n        return this.results_show();\n      } else if (this.result_highlight) {\n        prev_sibs = this.result_highlight.prevAll(\"li.active-result\");\n\n        if (prev_sibs.length) {\n          return this.result_do_highlight(prev_sibs.first());\n        } else {\n          if (this.choices_count() > 0) {\n            this.results_hide();\n          }\n\n          return this.result_clear_highlight();\n        }\n      }\n    };\n\n    Chosen.prototype.keydown_backstroke = function () {\n      var next_available_destroy;\n\n      if (this.pending_backstroke) {\n        this.choice_destroy(this.pending_backstroke.find(\"a\").first());\n        return this.clear_backstroke();\n      } else {\n        next_available_destroy = this.search_container.siblings(\"li.search-choice\").last();\n\n        if (next_available_destroy.length && !next_available_destroy.hasClass(\"search-choice-disabled\")) {\n          this.pending_backstroke = next_available_destroy;\n\n          if (this.single_backstroke_delete) {\n            return this.keydown_backstroke();\n          } else {\n            return this.pending_backstroke.addClass(\"search-choice-focus\");\n          }\n        }\n      }\n    };\n\n    Chosen.prototype.clear_backstroke = function () {\n      if (this.pending_backstroke) {\n        this.pending_backstroke.removeClass(\"search-choice-focus\");\n      }\n\n      return this.pending_backstroke = null;\n    };\n\n    Chosen.prototype.keydown_checker = function (evt) {\n      var stroke, _ref1;\n\n      stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;\n      this.search_field_scale();\n\n      if (stroke !== 8 && this.pending_backstroke) {\n        this.clear_backstroke();\n      }\n\n      switch (stroke) {\n        case 8:\n          this.backstroke_length = this.search_field.val().length;\n          break;\n\n        case 9:\n          if (this.results_showing && !this.is_multiple) {\n            this.result_select(evt);\n          }\n\n          this.mouse_on_container = false;\n          break;\n\n        case 13:\n          evt.preventDefault();\n          break;\n\n        case 38:\n          evt.preventDefault();\n          this.keyup_arrow();\n          break;\n\n        case 40:\n          evt.preventDefault();\n          this.keydown_arrow();\n          break;\n      }\n    };\n\n    Chosen.prototype.search_field_scale = function () {\n      var div, style, style_block, styles, w, _i, _len;\n\n      if (this.is_multiple) {\n        w = 0;\n        style_block = \"position:absolute; left: -1000px; top: -1000px; display:none;\";\n        styles = [\"font-size\", \"font-style\", \"font-weight\", \"font-family\", \"line-height\", \"text-transform\", \"letter-spacing\"];\n\n        for (_i = 0, _len = styles.length; _i < _len; _i++) {\n          style = styles[_i];\n          style_block += style + \":\" + this.search_field.css(style) + \";\";\n        }\n\n        div = $$1(\"<div></div>\", {\n          \"style\": style_block\n        });\n        div.text(this.search_field.val());\n        $$1(\"body\").append(div);\n        w = div.width() + 25;\n        div.remove();\n\n        if (!this.f_width) {\n          this.f_width = this.container.outerWidth();\n        }\n\n        if (w > this.f_width - 10) {\n          w = this.f_width - 10;\n        }\n\n        return this.search_field.css({\n          \"width\": w + \"px\"\n        });\n      }\n    };\n\n    Chosen.prototype.generate_random_id = function () {\n      var string;\n      string = \"sel\" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char();\n\n      while ($$1(\"#\" + string).length > 0) {\n        string += this.generate_random_char();\n      }\n\n      return string;\n    };\n\n    return Chosen;\n  }(AbstractChosen);\n\n  root.Chosen = Chosen;\n}).call($);\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../util/underscore-wrapper.js';\nimport Time from '../../util/Time.js';\nimport BaseView from '../BaseView.js';\n\nfunction getOption(callout, option) {\n  return oktaUnderscore.resultCtx(callout.options, option, callout) || oktaUnderscore.result(callout, option);\n}\n\nfunction getTopClass(callout) {\n  let klass = 'infobox clearfix infobox-' + getOption(callout, 'type');\n\n  switch (getOption(callout, 'size')) {\n    case 'standard':\n      klass += '';\n      break;\n\n    case 'slim':\n      klass += ' infobox-slim';\n      break;\n\n    case 'compact':\n      klass += ' infobox-compact';\n      break;\n\n    case 'large':\n      klass += ' infobox-md';\n      break;\n  }\n\n  if (getOption(callout, 'dismissible')) {\n    klass += ' infobox-dismiss';\n  }\n\n  return klass;\n}\n\nconst events = {\n  'click .infobox-dismiss-link': function (e) {\n    e.preventDefault();\n    this.$el.fadeOut(Time.UNLOADING_FADE, () => {\n      this.trigger('dismissed');\n      this.remove();\n    });\n  }\n};\n\nconst template = _Handlebars2.template({\n  \"1\": function (container, depth0, helpers, partials, data) {\n    var lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<a data-se=\\\"dismiss-link\\\" class=\\\"infobox-dismiss-link\\\" title=\\\"\" + container.escapeExpression((lookupProperty(helpers, \"i18n\") || depth0 && lookupProperty(depth0, \"i18n\") || container.hooks.helperMissing).call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"i18n\",\n      \"hash\": {\n        \"bundle\": \"courage\",\n        \"code\": \"component.dismiss\"\n      },\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 81\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 131\n        }\n      }\n    })) + \"\\\" href=\\\"#\\\"><span data-se=\\\"icon\\\" class=\\\"dismiss-icon\\\"></span></a>\";\n  },\n  \"3\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<h3 data-se=\\\"header\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"title\") || (depth0 != null ? lookupProperty(depth0, \"title\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"title\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 286\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 295\n        }\n      }\n    }) : helper)) + \"</h3>\";\n  },\n  \"5\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<p data-se=\\\"sub-header\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"subtitle\") || (depth0 != null ? lookupProperty(depth0, \"subtitle\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n      \"name\": \"subtitle\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 347\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 359\n        }\n      }\n    }) : helper)) + \"</p>\";\n  },\n  \"7\": function (container, depth0, helpers, partials, data) {\n    var stack1,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<ul data-se=\\\"list\\\" class=\\\"bullets\\\">\" + ((stack1 = lookupProperty(helpers, \"each\").call(depth0 != null ? depth0 : container.nullContext || {}, depth0 != null ? lookupProperty(depth0, \"bullets\") : depth0, {\n      \"name\": \"each\",\n      \"hash\": {},\n      \"fn\": container.program(8, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 420\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 483\n        }\n      }\n    })) != null ? stack1 : \"\") + \"</ul>\";\n  },\n  \"8\": function (container, depth0, helpers, partials, data) {\n    return \"<li data-se=\\\"list-item\\\">\" + container.escapeExpression(container.lambda(depth0, depth0)) + \"</li>\";\n  },\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    var stack1,\n        helper,\n        alias1 = depth0 != null ? depth0 : container.nullContext || {},\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"dismissible\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(1, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 0\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 202\n        }\n      }\n    })) != null ? stack1 : \"\") + \"<span data-se=\\\"icon\\\" class=\\\"icon \" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"icon\") || (depth0 != null ? lookupProperty(depth0, \"icon\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(alias1, {\n      \"name\": \"icon\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 235\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 243\n        }\n      }\n    }) : helper)) + \"\\\"></span>\" + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"title\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(3, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 252\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 307\n        }\n      }\n    })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"subtitle\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(5, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 307\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 370\n        }\n      }\n    })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"bullets\") : depth0, {\n      \"name\": \"if\",\n      \"hash\": {},\n      \"fn\": container.program(7, data, 0),\n      \"inverse\": container.noop,\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 370\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 495\n        }\n      }\n    })) != null ? stack1 : \"\");\n  },\n  \"useData\": true\n});\n\nconst CalloutCallout = BaseView.extend(\n/** @lends src/views/components/Callout.prototype */\n{\n  attributes: {\n    'data-se': 'callout'\n  },\n\n  /**\n   * Custom HTML or view to inject to the callout\n   * @type {String|Okta.View}\n   */\n  content: null,\n\n  /**\n   * Size of icon. options are standard, large, compact\n   * @type {String}\n   */\n  size: 'standard',\n\n  /**\n   * Type of the callout. Valid values are: info, success, warning, error, tip\n   * @type {String}\n   */\n  type: 'info',\n\n  /**\n   * Can the callout be dismissed\n   * @type {Boolean}\n   */\n  dismissible: false,\n\n  /**\n   * Callout title\n   * @type {String}\n   */\n  title: null,\n\n  /**\n   * Callout subtitle\n   * @type {String}\n   */\n  subtitle: null,\n\n  /**\n   * Array of strings to render as bullet points\n   * @type {Array}\n   */\n  bullets: null,\n\n  /**\n   * Fired after the callout is dismised - applies when\n   * {@link module:Okta.internal.views.components.Callout|dismissible} is set to true\n   * @event src/views/components/Callout#dismissed\n   */\n  constructor: function () {\n    this.events = oktaUnderscore.defaults(this.events || {}, events);\n    BaseView.apply(this, arguments);\n    this.$el.addClass(getTopClass(this));\n    this.template = template;\n    const content = getOption(this, 'content');\n\n    if (content) {\n      this.add(content);\n    }\n  },\n  getTemplateData: function () {\n    let icon = getOption(this, 'type');\n    const size = getOption(this, 'size');\n\n    if (icon === 'tip') {\n      // css is inconsistent\n      icon = 'light-bulb';\n    }\n\n    switch (size) {\n      case 'slim':\n        icon = '';\n        break;\n\n      case 'large':\n        icon = [icon, '-', '24'].join('');\n        break;\n\n      default:\n        icon = [icon, '-', '16'].join('');\n    }\n\n    return {\n      icon: icon,\n      title: getOption(this, 'title'),\n      subtitle: getOption(this, 'subtitle'),\n      bullets: getOption(this, 'bullets'),\n      dismissible: getOption(this, 'dismissible')\n    };\n  }\n});\n/**\n * @class src/views/components/Callout\n * @extends module:Okta.View\n */\n\n/**\n * @class module:Okta.internal.views.components.Callout\n */\n\nvar Callout = /** @lends module:Okta.internal.views.components.Callout */\n{\n  /**\n   * Creates a {@link src/views/components/Callout|Callout}.\n   * @static\n   * @param {Object} options\n   * @param {String|Function} [options.size] Size of icon. options are standard, large, compact, slim\n   * @param {String|Okta.View} [options.content] Custom HTML or view to inject to the callout\n   * @param {String|Function} [options.title] Callout title\n   * @param {String|Function} [options.subtitle] Callout subtitle\n   * @param {Array|Function} [options.bullets] Array of strings to render as bullet points\n   * @param {Boolean|Function} [options.dismissible] Can the callout be dismissed\n   * @param {String|Function} [options.type] Callout type. Valid values are: info, success, warning, error, tip\n   *\n   * @return {src/views/components/Callout}\n   */\n  create: function (options) {\n    return new CalloutCallout(options);\n  }\n};\n\nexport { Callout as default };\n","var Time = {\n  DEBOUNCE_DELAY: 200,\n  LOADING_FADE: 400,\n  UNLOADING_FADE: 400,\n  ROW_EXPANDER_TRANSITION: 150,\n  HIDE_ADD_MAPPING_FORM: 300\n};\n\nexport { Time as default };\n","import _Handlebars2 from '../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaJQueryStatic from '../../util/jquery-wrapper.js';\nimport oktaUnderscore from '../../util/underscore-wrapper.js';\nimport ButtonFactory from '../../util/ButtonFactory.js';\nimport StringUtil from '../../util/StringUtil.js';\nimport BaseView from '../BaseView.js';\nimport Callout from '../components/Callout.js';\nimport Keys from '../../util/Keys.js';\n\nconst props = {\n  tagName: 'span',\n  attributes: function () {\n    return {\n      'data-se': 'o-form-input-' + this.getNameString()\n    };\n  },\n\n  /**\n   * default placeholder text when options.placeholder is not defined\n   */\n  defaultPlaceholder: '',\n  constructor: function (options) {\n    /* eslint complexity: [2, 9] */\n    options = oktaUnderscore.defaults(options || {}, {\n      inputId: options.id || oktaUnderscore.uniqueId('input'),\n      placeholder: this.defaultPlaceholder,\n      inlineValidation: true,\n      validateOnlyIfDirty: false\n    });\n    delete options.id; // decorate the `enable` and `disable` and toggle the `o-form-disabled` class.\n    // so we wont need to worry about this when overriding the methods\n\n    const self = this;\n\n    oktaUnderscore.each({\n      enable: 'removeClass',\n      disable: 'addClass'\n    }, function (method, action) {\n      self[action] = oktaUnderscore.wrap(self[action], function (fn) {\n        fn.apply(self, arguments);\n        self.$el[method]('o-form-disabled');\n      });\n    });\n\n    BaseView.call(this, options);\n\n    if (oktaUnderscore.result(options, 'readOnly') !== true && oktaUnderscore.result(options, 'read') === true) {\n      this.listenTo(this.model, 'change:__edit__', this.render);\n    }\n\n    if (oktaUnderscore.isFunction(this.focus)) {\n      this.focus = oktaUnderscore.debounce(oktaUnderscore.bind(this.focus, this), 50);\n    } // Enable inline validation if this is not the first field in the form.\n\n\n    if (!oktaUnderscore.result(options, 'validateOnlyIfDirty')) {\n      this.addInlineValidation();\n    }\n\n    this.addModelListeners();\n    this.$el.addClass('o-form-input-name-' + this.getNameString());\n  },\n  addAriaLabel: function () {\n    const ariaLabel = this.options.ariaLabel;\n\n    if (ariaLabel) {\n      this.$(':input').attr('aria-label', ariaLabel);\n    }\n  },\n  addInlineValidation: function () {\n    if (oktaUnderscore.result(this.options, 'inlineValidation')) {\n      this.$el.on('focusout', ':input', oktaUnderscore.bind(this.validate, this));\n    }\n  },\n  toModelValue: function () {\n    let value = this.val();\n\n    if (oktaUnderscore.isFunction(this.to)) {\n      value = this.to.call(this, value);\n    }\n\n    if (oktaUnderscore.isFunction(this.options.to)) {\n      value = this.options.to.call(this, value);\n    }\n\n    return value;\n  },\n  __getDependencyCalloutBtn: function (btnConfig) {\n    const self = this;\n\n    const btnOptions = oktaUnderscore.clone(btnConfig);\n\n    const originalClick = btnOptions.click || function () {}; // add onfocus listener to re-evaluate depedency when callout button is clicked\n\n\n    btnOptions.click = function () {\n      oktaJQueryStatic(window).one('focus.dependency', function () {\n        self.__showInputDependencies();\n      });\n      originalClick.call(self);\n    };\n\n    const BaseInputCalloutBtn = BaseView.extend({\n      children: [ButtonFactory.create(btnOptions)]\n    });\n    return new BaseInputCalloutBtn();\n  },\n  getCalloutParent: function () {\n    return this.$('input[value=\"' + this.getModelValue() + '\"]').parent();\n  },\n  __getCalloutMsgContainer: function (calloutMsg) {\n    return BaseView.extend({\n      template: _Handlebars2.template({\n        \"compiler\": [8, \">= 4.3.0\"],\n        \"main\": function (container, depth0, helpers, partials, data) {\n          var helper,\n              lookupProperty = container.lookupProperty || function (parent, propertyName) {\n            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n              return parent[propertyName];\n            }\n\n            return undefined;\n          };\n\n          return \"<span class=\\\"o-form-explain\\\">\" + container.escapeExpression((helper = (helper = lookupProperty(helpers, \"msg\") || (depth0 != null ? lookupProperty(depth0, \"msg\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n            \"name\": \"msg\",\n            \"hash\": {},\n            \"data\": data,\n            \"loc\": {\n              \"start\": {\n                \"line\": 1,\n                \"column\": 29\n              },\n              \"end\": {\n                \"line\": 1,\n                \"column\": 36\n              }\n            }\n          }) : helper)) + \"</span>\";\n        },\n        \"useData\": true\n      }),\n      getTemplateData: function () {\n        return {\n          msg: calloutMsg\n        };\n      }\n    });\n  },\n  showCallout: function (calloutConfig, dependencyResolved) {\n    const callout = oktaUnderscore.clone(calloutConfig);\n\n    callout.className = 'dependency-callout';\n\n    if (callout.btn) {\n      callout.content = this.__getDependencyCalloutBtn(callout.btn);\n      delete callout.btn;\n    }\n\n    const dependencyCallout = Callout.create(callout);\n\n    if (!dependencyResolved) {\n      dependencyCallout.add(this.__getCalloutMsgContainer(StringUtil.localize('dependency.callout.msg', 'courage')));\n    }\n\n    const calloutParent = this.getCalloutParent();\n    calloutParent.append(dependencyCallout.render().el);\n\n    if (callout.type === 'success') {\n      oktaUnderscore.delay(function () {\n        // fade out success callout\n        dependencyCallout.$el.fadeOut(800);\n      }, 1000);\n    }\n  },\n  removeCallout: function () {\n    this.$el.find('.dependency-callout').remove();\n  },\n  __evaluateCalloutObject: function (dependencyResolved, calloutTitle) {\n    let defaultCallout;\n\n    if (dependencyResolved) {\n      defaultCallout = {\n        title: StringUtil.localize('dependency.action.completed', 'courage'),\n        size: 'large',\n        type: 'success'\n      };\n    } else {\n      defaultCallout = {\n        title: StringUtil.localize('dependency.action.required', 'courage', [calloutTitle]),\n        size: 'large',\n        type: 'warning'\n      };\n    }\n\n    return defaultCallout;\n  },\n  __handleDependency: function (result, callout) {\n    const self = this;\n    const calloutConfig = oktaUnderscore.isFunction(callout) ? callout(result) : oktaUnderscore.extend({}, callout, self.__evaluateCalloutObject(result.resolved, callout.title)); // remove existing callouts if any\n\n    self.removeCallout();\n    self.showCallout(calloutConfig, result.resolved);\n  },\n  __showInputDependencies: function () {\n    const self = this;\n    const fieldDependency = self.options.deps[self.getModelValue()];\n\n    if (fieldDependency && oktaUnderscore.isFunction(fieldDependency.func)) {\n      fieldDependency.func().done(function (data) {\n        self.__handleDependency({\n          resolved: true,\n          data: data\n        }, fieldDependency.callout);\n      }).fail(function (data) {\n        self.__handleDependency({\n          resolved: false,\n          data: data\n        }, fieldDependency.callout);\n      });\n    } else {\n      self.removeCallout();\n    }\n  },\n  _isEdited: false,\n  hasIMESupport: false,\n\n  /**\n   * updates the model with the input's value\n   */\n  update: function (e) {\n    if (!this._isEdited && oktaUnderscore.result(this.options, 'validateOnlyIfDirty')) {\n      this._isEdited = true;\n      this.addInlineValidation();\n    }\n\n    this.model.set(this.options.name, this.toModelValue());\n\n    if (this.options.deps) {\n      // check for dependencies\n      this.__showInputDependencies();\n    }\n    /*\n      To add IME support for more components\n      - Add hasIMESupport boolean flag and compositionend and compositionstart event listeners to the component\n      - Supported components: TextBox.js, TextSelect.js\n      - Additionally window.okta.enableIMESupport is an org level FF to toggle IME support\n    */\n\n\n    if (this.hasIMESupport && window?.okta?.enableIMESupport) {\n      if (this.isComposing) {\n        return;\n      }\n\n      if (e && Keys.isEnter(e)) {\n        this.model.trigger('form:save');\n      }\n    }\n  },\n\n  /**\n   * Is the input in edit mode\n   * @return {Boolean}\n   */\n  isEditMode: function () {\n    const ret = !oktaUnderscore.result(this.options, 'readOnly') && (oktaUnderscore.result(this.options, 'read') !== true || this.model.get('__edit__') === true);\n    return ret;\n  },\n\n  /**\n   * Renders the input\n   * @readonly\n   */\n  render: function () {\n    this.preRender();\n    const params = this.options.params;\n    this.options.params = oktaUnderscore.resultCtx(this.options, 'params', this);\n\n    if (this.isEditMode()) {\n      this.editMode();\n\n      if (oktaUnderscore.resultCtx(this.options, 'disabled', this)) {\n        this.disable();\n      } else {\n        this.enable();\n      }\n    } else {\n      this.readMode();\n    }\n\n    this.options.params = params;\n    this.addAriaLabel();\n    this.postRender();\n    return this;\n  },\n\n  /**\n   * checks if the current value in the model is valid for this field\n   */\n  validate: function () {\n    if (!this.model.get('__pending__') && this.isEditMode() && oktaUnderscore.isFunction(this.model.validateField)) {\n      const validationError = this.model.validateField(this.options.name);\n\n      if (validationError) {\n        oktaUnderscore.delay(function () {\n          this.model.trigger('form:clear-error:' + this.options.name);\n          this.model.trigger('invalid', this.model, validationError, false);\n        }.bind(this), 100);\n      }\n    }\n  },\n\n  /**\n   * Add model event listeners\n   */\n  addModelListeners: function () {\n    this.listenTo(this.model, 'form:field-error', function (name) {\n      if (this.options.name === name) {\n        this.__markError();\n      }\n    });\n    this.listenTo(this.model, 'form:clear-errors change:' + this.options.name, this.__clearError);\n    this.listenTo(this.model, 'form:clear-error:' + this.options.name, this.__clearError);\n  },\n\n  /**\n   * The value of the input\n   * @return {Mixed}\n   */\n  val: function () {\n    throw new Error('val() is an abstract method');\n  },\n\n  /**\n   * Set focus on the input\n   */\n  focus: function () {\n    throw new Error('focus() is an abstract method');\n  },\n\n  /**\n   * Default value in read mode\n   * When model has no value for the field\n   */\n  defaultValue: function () {\n    return '';\n  },\n\n  /**\n   * Renders the input in edit mode\n   */\n  editMode: function () {\n    const options = oktaUnderscore.extend({}, this.options, {\n      value: this.getModelValue()\n    });\n\n    this.$el.html(this.template(options));\n    this.options.multi && this.$el.removeClass('margin-r');\n    return this;\n  },\n\n  /**\n   * Renders the readable value of the input in read mode\n   */\n  readMode: function () {\n    this.$el.text(this.getReadModeString());\n    this.$el.removeClass('error-field');\n    this.options.multi && this.$el.addClass('margin-r');\n    return this;\n  },\n  getReadModeString: function () {\n    const readModeStr = oktaUnderscore.resultCtx(this.options, 'readModeString', this);\n\n    if (readModeStr) {\n      return readModeStr;\n    }\n\n    return this.toStringValue();\n  },\n\n  /**\n   * The model value off the field associated with the input\n   * @return {Mixed}\n   */\n  getModelValue: function () {\n    let value = this.model.get(this.options.name);\n\n    if (oktaUnderscore.isFunction(this.from)) {\n      value = this.from.call(this, value);\n    }\n\n    if (oktaUnderscore.isFunction(this.options.from)) {\n      value = this.options.from.call(this, value);\n    }\n\n    return value;\n  },\n\n  /*\n  * convenience method to get the textual value from the model\n  * will return the textual label rather than value in case of select/radio\n  * @return {String}\n  */\n  toStringValue: function () {\n    let value = this.getModelValue();\n\n    if (this.options.options) {\n      // dropdown or radio\n      value = this.options.options[value];\n    }\n\n    if (Number.isInteger(value) || typeof value === 'boolean') {\n      value = String(value);\n    }\n\n    return value || this.defaultValue();\n  },\n\n  /**\n   * Triggers a form:resize event in order to tell dialogs content size has changed\n   */\n  resize: function () {\n    this.model.trigger('form:resize');\n  },\n\n  /**\n   * Disable the input\n   */\n  disable: function () {\n    this.$(':input').prop('disabled', true);\n  },\n\n  /**\n   * Enable the input\n   */\n  enable: function () {\n    this.$(':input').prop('disabled', false);\n  },\n\n  /**\n   * Change the type of the input field. (e.g., text <--> password)\n   * @param type\n   */\n  changeType: function (type) {\n    this.$(':input').prop('type', type); // Update the options so that it keeps the uptodate state\n\n    this.options.type = type;\n  },\n  getNameString: function () {\n    if (oktaUnderscore.isArray(this.options.name)) {\n      return this.options.name.join('-');\n    }\n\n    return this.options.name;\n  },\n\n  /**\n   * Get parameters, computing _.result\n   * @param  {[type]} options alternative options\n   * @return {Object} the params\n   */\n  getParams: function (options) {\n    const opts = options || this.options || {};\n    return oktaUnderscore.clone(oktaUnderscore.resultCtx(opts, 'params', this) || {});\n  },\n\n  /**\n   * get a parameter from options.params, compute _.result when needed.\n   * @param  {String} key\n   * @param  {Object} defaultValue\n   * @return {Object} the params\n   */\n  getParam: function (key, defaultValue) {\n    const result = oktaUnderscore.resultCtx(this.getParams(), key, this);\n\n    return !oktaUnderscore.isUndefined(result) ? result : defaultValue;\n  },\n\n  /**\n   * Get a parameter from options.params or if empty, object attribute.\n   *\n   * @param  {String} key\n   * @return {Object} the param or attribute\n   */\n  getParamOrAttribute: function (key) {\n    return this.getParam(key) || oktaUnderscore.result(this, key);\n  },\n  __markError: function () {\n    this.$el.addClass('o-form-has-errors');\n  },\n  __clearError: function () {\n    this.$el.removeClass('o-form-has-errors');\n  }\n};\n/**\n * @class BaseInput\n * @private\n * An abstract object that defines an input for {@link Okta.Form}\n *\n * BaseInputs are typically not created directly, but being passed to {@link Okta.Form#addInput}\n * @extends Okta.View\n */\n\nvar BaseInput = BaseView.extend(props);\n\nexport { BaseInput as default };\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaJQueryStatic from '../../../util/jquery-wrapper.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport Keys from '../../../util/Keys.js';\nimport '../../../vendor/plugins/chosen.jquery.js';\nimport BaseInput from '../BaseInput.js';\nimport Util from '../../../util/Util.js';\nimport StringUtil from '../../../util/StringUtil.js';\n\nconst template = _Handlebars2.template({\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        alias1 = depth0 != null ? depth0 : container.nullContext || {},\n        alias2 = container.hooks.helperMissing,\n        alias3 = \"function\",\n        alias4 = container.escapeExpression,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<select id=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"inputId\") || (depth0 != null ? lookupProperty(depth0, \"inputId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"inputId\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 12\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 23\n        }\n      }\n    }) : helper)) + \"\\\" name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"name\") || (depth0 != null ? lookupProperty(depth0, \"name\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"name\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 31\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 39\n        }\n      }\n    }) : helper)) + \"\\\"></select>\";\n  },\n  \"useData\": true\n});\n\nconst option = _Handlebars2.template({\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        alias1 = depth0 != null ? depth0 : container.nullContext || {},\n        alias2 = container.hooks.helperMissing,\n        alias3 = \"function\",\n        alias4 = container.escapeExpression,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<option value=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"key\") || (depth0 != null ? lookupProperty(depth0, \"key\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"key\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 15\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 22\n        }\n      }\n    }) : helper)) + \"\\\">\" + alias4((helper = (helper = lookupProperty(helpers, \"value\") || (depth0 != null ? lookupProperty(depth0, \"value\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"value\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 24\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 33\n        }\n      }\n    }) : helper)) + \"</option>\";\n  },\n  \"useData\": true\n});\n\nconst CHOSEN_WINDOW_MARGIN = 20;\nconst isSafari = Util.isSafari; // Chosen has known problems when it's at the bottom of a container that has\n// overflow:hidden set. Because it attaches to the parent container, its\n// dropdown will be cut off in the UI. Any modal with a chosen select element\n// at the bottom will manifest this behavior.\n//\n// The fix (aside from replacing Chosen) is to change Chosen's behavior -\n// use the existing styles, but attach it to 'body' and position it correctly\n// so that it is not affected by a parent overflow.\n//\n// More details can be found in OKTA-46489, OKTA-83570\n\nconst CHOSEN_MAX_HEIGHT = 240;\nconst CHOSEN_Z_INDEX = 50000;\n\nfunction defer(fn) {\n  if (this.params.autoWidth) {\n    return fn.call(this);\n  } else {\n    return oktaUnderscore.defer(oktaUnderscore.bind(fn, this));\n  }\n}\n\nfunction findSelectWidth(self) {\n  self.$select.hide();\n  const select = oktaJQueryStatic(self.$select[0]).hide();\n  oktaJQueryStatic('body').append(select);\n  const width = self.params.width = select.width() * 1.2 + 'px';\n  self.$el.append(select.show());\n  return width;\n}\n\nfunction recalculateChosen($chosen, $results, $clone) {\n  const offset = $clone.offset();\n  $chosen.css({\n    left: offset.left,\n    top: offset.top\n  }); // Update the max-height to fit within the constraints of the window. This\n  // is especially important for modals because page scrolling is disabled.\n\n  const $win = oktaJQueryStatic(window);\n  const rHeight = $results.outerHeight();\n  const rBottom = rHeight + $results.offset().top - $win.scrollTop();\n  const wHeight = $win.height() - CHOSEN_WINDOW_MARGIN;\n  const maxHeight = Math.min(rHeight + wHeight - rBottom, CHOSEN_MAX_HEIGHT);\n  $results.css('max-height', maxHeight);\n}\n\nfunction handleKeyUpEvent($select, $chosen, $results) {\n  const $highlightedOption = $results.find('.active-result.highlighted');\n  $chosen.find('#' + $select.attr('id') + '_txt').attr('aria-activedescendant', $highlightedOption.attr('id')); // change the old selected item aria-selected to false\n  // and add add it to new item.\n\n  $results.find('[aria-selected=true]').attr('aria-selected', 'false');\n  $highlightedOption.attr('aria-selected', 'true'); // In case of Safari, add message to aria-live node to be read by screenreader.\n  // We need to do this special handling for Safari due to falkiness with aria-activedescendant\n  // handling. https://bit.ly/3z45IZF\n\n  if (isSafari()) {\n    // message read by screenReader i.e optionValue selected(United States selected)\n    const message = StringUtil.localize('oform.selectInput.country', 'courage', [$highlightedOption.text()]);\n    const elementId = $select.attr('id');\n\n    if (message !== '') {\n      oktaJQueryStatic(`#${elementId}_aria_div_id`).text(message);\n    }\n  }\n\n  const noResult = $results.find('li.no-results');\n\n  if (noResult.length) {\n    noResult.attr('role', 'alert');\n  }\n}\n\nfunction fixChosenModal($select, textPlaceholder) {\n  const $chosen = $select.next('.chzn-container');\n  const $clone = $chosen.clone();\n  const $results = $chosen.find('.chzn-results');\n  const $searchInput = $chosen.find('.chzn-search input[type=text]');\n  $searchInput.on('keyup', () => {\n    handleKeyUpEvent($select, $chosen, $results);\n  });\n  $chosen.addClass('closed'); // Will be used in SIW to fix screen reader focus.\n  // Use a hidden clone to maintain layout and calculate offset. This is\n  // necessary for more complex layouts (like adding a group rule) where\n  // the chosen element is floated.\n\n  $clone.css('visibility', 'hidden');\n  $clone.removeAttr('id');\n  $clone.find('li').removeAttr('id'); // Save the original styles - we'll revert to them when the select closes\n\n  const baseStyles = {\n    left: $chosen.css('left'),\n    top: $chosen.css('top'),\n    position: $chosen.css('position'),\n    float: $chosen.css('float'),\n    'z-index': $chosen.css('z-index')\n  };\n  $results.hide(); // Handler for any resize events that happen when the results list is open\n\n  const resizeHandler = oktaUnderscore.debounce(function () {\n    recalculateChosen($chosen, $results, $clone);\n  }, 10); // When the dropdown opens, attach it to body, with the correct absolute\n  // position coordinates\n\n\n  $select.off('.fixChosen'); // Remove events we could have added before\n\n  $select.on('liszt:showing_dropdown.fixChosen', function () {\n    $chosen.width($chosen.width());\n    $select.after($clone); // .chzn-container can trigger the vertical scrollbar if it causes scrollHeight > window height after append to\n    // the body. Force top -999999 to avoid the scrollbar so $chosen can find the right offset for relocation.\n\n    $chosen.css({\n      position: 'absolute',\n      float: 'none',\n      'z-index': CHOSEN_Z_INDEX,\n      top: -999999\n    });\n    oktaJQueryStatic('body').append($chosen);\n    oktaJQueryStatic('.chzn-search > :text').prop('placeholder', textPlaceholder);\n    $results.show();\n    recalculateChosen($chosen, $results, $clone); // Capture scroll events:\n    // - for forms that use fixed positioning (like editing attributes in\n    //   Profile Editor) - window scroll\n    // - for forms that are too long for the modal - o-form-content scroll\n\n    $select.parents().scroll(resizeHandler);\n    oktaJQueryStatic(window).on('resize scroll', resizeHandler);\n  });\n  $select.on('liszt:showing_dropdown', function () {\n    $chosen.removeClass('closed');\n  }); // When the dropdown closes or the element is removed, revert to the\n  // original styles and reattach it to its original placement in the dom.\n\n  $select.on('liszt:hiding_dropdown.fixChosen remove.fixChosen', function () {\n    $select.parents().off('scroll', resizeHandler);\n    oktaJQueryStatic(window).off('resize scroll', resizeHandler);\n    $chosen.css(baseStyles);\n    $results.hide();\n    $chosen.addClass('closed');\n    $results.css('max-height', CHOSEN_MAX_HEIGHT);\n    $clone.remove();\n    $select.after($chosen);\n  }); // Do not change the order of event listeners. This event must execute after \n  // \"liszt:hiding_dropdown.fixChosen remove.fixChosen\"\n\n  $select.on('liszt:hiding_dropdown.fixChosen', function () {\n    $searchInput.focus(); // set focus back to input only when the dropdown is closed\n  });\n}\n\nvar Select = BaseInput.extend({\n  className: 'o-form-select',\n\n  /**\n   * @Override\n   */\n  events: {\n    'change select': 'update',\n    'keyup .chzn-search > :text': function (e) {\n      if (Keys.isEsc(e)) {\n        this.$('.chzn-search > :text').val('');\n        e.stopPropagation();\n      }\n    }\n  },\n  constructor: function () {\n    this.template = template;\n    this.option = this.option || option;\n    BaseInput.apply(this, arguments);\n    this.params = this.options.params || {};\n  },\n\n  /**\n   * @Override\n   */\n  editMode: function () {\n    /* eslint max-statements: [2, 17] */\n    this.$el.html(template(this.options));\n    this.$select = this.$('select');\n    this.appendOptions(); // Fix a regression in jQuery 1.x on Firefox\n    // jQuery.val(value) prepends an empty option to the dropdown\n    // if value doesnt exist in the dropdown.\n    // http://bugs.jquery.com/ticket/13514\n\n    const value = this.getModelValue();\n\n    if (value) {\n      this.$select.val(value);\n    } else {\n      this.$('option:first-child').prop('selected', true);\n    }\n\n    this.$el.addClass('o-form-control');\n\n    if (this.params.chosen !== false) {\n      this.__applyChosen();\n    }\n\n    return this;\n  },\n  appendOptions: function () {\n    if (!this.getOptions()) {\n      return;\n    }\n\n    const options = this.getOptions();\n    const keys = Object.keys(options);\n    this.applySortByKey(keys);\n    keys.forEach(key => {\n      this.$select.append(this.option({\n        key: key,\n        value: options[key]\n      }));\n    });\n  },\n  applySortByKey: function (keys) {\n    const sortByKey = this.options.sortByKey;\n\n    if (!sortByKey) {\n      return;\n    }\n\n    if (sortByKey instanceof Function) {\n      keys.sort(sortByKey);\n    }\n\n    if (sortByKey === 'asc') {\n      keys.sort();\n    }\n\n    if (sortByKey === 'desc') {\n      keys.sort();\n      keys.reverse();\n    }\n  },\n  __applyChosen: function (update) {\n    let width = this.options.wide ? '100%' : this.params.width || '62%';\n\n    if (this.params.autoWidth) {\n      width = findSelectWidth(this);\n    }\n\n    defer.call(this, function () {\n      const searchThreshold = this.getParam('searchThreshold', 10);\n\n      if (!oktaUnderscore.result(this.options, 'autoRender') && update !== false) {\n        this.update();\n      }\n\n      this.$select.chosen({\n        width: width,\n        disable_search_threshold: searchThreshold,\n        //eslint-disable-line camelcase\n        placeholder_text: this.options['placeholder'],\n        //eslint-disable-line camelcase\n        search_contains: true //eslint-disable-line camelcase\n\n      }); //if options are more than search threshold, consider it as a combobox\n\n      const isComboBox = this.options && this.options.options && Object.keys(this.options.options).length > searchThreshold;\n      this.accessibilityUpdate(isComboBox, this.params);\n      fixChosenModal(this.$select, this.searchPlaceholder);\n\n      if (this.params.autoWidth) {\n        // fix a chosen css bug\n        this.$el.width(0);\n      }\n\n      this.model.trigger('form:resize');\n    });\n  },\n\n  /**\n   * @Override\n   */\n  val: function () {\n    return this.$select && this.$select.val();\n  },\n\n  /**\n   * @Override\n   */\n  focus: function () {\n    if (this.$select) {\n      return this.$select.focus();\n    }\n  },\n\n  /**\n   * @Override\n   */\n  toStringValue: function () {\n    const selectedOption = this.getModelValue();\n    let displayString = selectedOption;\n    const options = this.getOptions();\n\n    if (!oktaUnderscore.isEmpty(options)) {\n      displayString = options[selectedOption];\n    }\n\n    if (oktaUnderscore.isUndefined(displayString)) {\n      displayString = this.defaultValue();\n    }\n\n    return displayString || '';\n  },\n\n  /**\n   * Convert options to an object\n   * support input options that is a\n   * 1. a static object such as {key1: val1, key2: val2...}\n   * 2. a function to be called to return a static object\n   * will return an object with key-value pairs or with empty content\n   * @return {Object} The value\n   */\n  getOptions: function () {\n    let options = this.options.options;\n\n    if (oktaUnderscore.isFunction(options)) {\n      options = options.call(this);\n    }\n\n    return oktaUnderscore.isObject(options) ? options : {};\n  },\n  remove: function () {\n    if (this.$select) {\n      this.$select.trigger('remove');\n    }\n\n    return BaseInput.prototype.remove.apply(this, arguments);\n  },\n\n  /**\n   * @param ariaDivId id for div element\n   * Create a div element and add it to chosen container.\n   */\n  createAriaLiveNode: function (ariaDivId) {\n    const $chosen = this.$select.next('.chzn-container'); // set this to off-screen such that no user will see this and only screenReaders will pick this up.\n    // we should announce to user only on additions and not on removals.\n\n    const $node = oktaJQueryStatic('<div></div>').attr('role', 'log').attr('aria-live', 'polite').attr('id', ariaDivId).attr('aria-relevant', 'additions').attr('aria-atomic', 'false').attr('class', 'off-screen');\n    $node.insertAfter($chosen);\n  },\n\n  /**\n   * Code to make the select/combobox component accessible with screen readers.\n   *\n   * @param {boolean} isComboBox - Is the select a combobox?\n   * @param {object} params - params like aria label\n   */\n  // eslint-disable-next-line max-statements\n  accessibilityUpdate: function (isComboBox, params) {\n    const txtBoxId = this.$select.attr('id') + '_txt';\n    const ariaDivId = this.$select.attr('id') + '_aria_div_id';\n    const ulTagId = this.$select.attr('id') + '_ul'; // this is to fix(OKTA-506711) the accessibility issue due to partial support of aria-activedescendant\n    // by Safari. Make use of aria-live to make screenReader announce the option selected by user as a workaround.\n\n    if (isSafari()) {\n      this.createAriaLiveNode(ariaDivId);\n    }\n\n    this.$('ul[class=chzn-results]').attr('role', 'listbox').attr('id', ulTagId);\n\n    if (isComboBox) {\n      this.$('input[type=text]').attr('id', txtBoxId).attr('aria-autocomplete', 'list').attr('aria-activedescendant', '').attr('role', 'combobox').attr('aria-expanded', 'true').attr('aria-controls', ulTagId);\n    } else {\n      this.$('input[type=text]').attr('id', txtBoxId).attr('role', 'listbox');\n    }\n\n    if (params && params.aria && params.aria.label) {\n      const ariaLabel = params.aria.label.trim();\n      this.$('input[type=text]').attr('id', txtBoxId).attr('aria-label', ariaLabel);\n      this.$('ul[class=chzn-results]').attr('aria-label', ariaLabel);\n    } else {\n      const ariaLabel = this.$el.parent().prev('.o-form-label').find('label').text().trim();\n      this.$('input[type=text]').attr('id', txtBoxId).attr('aria-label', ariaLabel);\n      this.$('ul[class=chzn-results]').attr('aria-label', ariaLabel);\n    }\n\n    this.$('.chzn-results .active-result').attr('role', 'option').attr('aria-selected', 'false');\n  }\n});\n\nexport { Select as default };\n","import Select from './Select.js';\n\nconst options = {\n  undefined: 'undefined',\n  true: 'true',\n  false: 'false'\n};\n\nconst from = function (val) {\n  if (val) {\n    return 'true';\n  }\n\n  if (val === false) {\n    return 'false';\n  }\n\n  return 'undefined';\n};\n\nconst to = function (val) {\n  switch (val) {\n    case 'undefined':\n      return null;\n\n    case 'true':\n      return true;\n\n    case 'false':\n      return false;\n\n    default:\n      return null;\n  }\n};\n\nvar BooleanSelect = Select.extend({\n  initialize: function () {\n    this.options.options = options;\n    this.options.from = from;\n    this.options.to = to;\n  }\n});\n\nexport { BooleanSelect as default };\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport SchemaUtils from '../../../util/SchemaUtil.js';\nimport StringUtil from '../../../util/StringUtil.js';\nimport Time from '../../../util/Time.js';\nimport BaseView from '../../BaseView.js';\n\nconst isVowel = function (string) {\n  return /^[aeiou]/.test(string);\n};\n\nconst getArticle = function (string) {\n  return isVowel(string) ? 'an' : 'a';\n};\n\nconst template = _Handlebars2.template({\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    var helper,\n        alias1 = depth0 != null ? depth0 : container.nullContext || {},\n        alias2 = container.hooks.helperMissing,\n        alias3 = \"function\",\n        alias4 = container.escapeExpression,\n        lookupProperty = container.lookupProperty || function (parent, propertyName) {\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return parent[propertyName];\n      }\n\n      return undefined;\n    };\n\n    return \"<div class=\\\"o-form-input-group-controls\\\"><span class=\\\"input-fix o-form-control\\\"><input type=\\\"text\\\" class=\\\"o-form-text\\\" name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"key\") || (depth0 != null ? lookupProperty(depth0, \"key\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"key\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 125\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 132\n        }\n      }\n    }) : helper)) + \"\\\" id=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"key\") || (depth0 != null ? lookupProperty(depth0, \"key\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"key\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 138\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 145\n        }\n      }\n    }) : helper)) + \"\\\" value=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"value\") || (depth0 != null ? lookupProperty(depth0, \"value\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"value\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 154\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 163\n        }\n      }\n    }) : helper)) + \"\\\" placeholder=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"placeholder\") || (depth0 != null ? lookupProperty(depth0, \"placeholder\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"placeholder\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 178\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 193\n        }\n      }\n    }) : helper)) + \"\\\"/></span><a href=\\\"#\\\" class=\\\"link-button link-button-icon icon-only\\\"><span class=\\\"icon clear-input-16 \\\"></span></a></div><p class=\\\"o-form-input-error o-form-explain\\\"><span class=\\\"icon icon-16 error-16-small\\\"></span>\" + alias4((helper = (helper = lookupProperty(helpers, \"errorExplain\") || (depth0 != null ? lookupProperty(depth0, \"errorExplain\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n      \"name\": \"errorExplain\",\n      \"hash\": {},\n      \"data\": data,\n      \"loc\": {\n        \"start\": {\n          \"line\": 1,\n          \"column\": 408\n        },\n        \"end\": {\n          \"line\": 1,\n          \"column\": 424\n        }\n      }\n    }) : helper)) + \"</p>\";\n  },\n  \"useData\": true\n});\n\nconst errorClass = 'o-form-has-errors';\nconst updateArrayEvent = 'updateArray';\nvar DeletableBox = BaseView.extend({\n  tagName: 'div',\n  className: 'o-form-input-group',\n  events: {\n    'click a': function (e) {\n      e.preventDefault();\n      this.remove();\n    },\n    'keyup input': function () {\n      this.update();\n    }\n  },\n  isEditMode: function () {\n    return !this.options.readOnly && (this.options.read !== true || this.model.get('__edit__') === true);\n  },\n  initialize: function () {\n    this.template = template(oktaUnderscore.extend(this.options, {\n      placeholder: this.getPlaceholderText(),\n      errorExplain: this.getErrorExplainText()\n    }));\n    this.update = oktaUnderscore.debounce(this.update, this.options.debounceDelay || Time.DEBOUNCE_DELAY);\n  },\n  render: function () {\n    if (this.isEditMode()) {\n      this.$el.html(this.template);\n    } else {\n      this.$el.text(this.options.value);\n      this.$('a').hide();\n    }\n\n    return this;\n  },\n  remove: function () {\n    this.trigger(updateArrayEvent, null);\n    this.$el.slideUp(() => {\n      BaseView.prototype.remove.call(this, arguments);\n    });\n  },\n  update: function () {\n    let updatedValue = this.$('input').val();\n\n    const parseFunc = oktaUnderscore.object([SchemaUtils.DATATYPE.number, SchemaUtils.DATATYPE.integer], [StringUtil.parseFloat, this.parseInt]);\n\n    if (oktaUnderscore.has(parseFunc, this.options.itemType)) {\n      updatedValue = parseFunc[this.options.itemType](updatedValue);\n      !oktaUnderscore.isNumber(updatedValue) ? this.markInvalid() : this.clearInvalid();\n    }\n\n    this.trigger(updateArrayEvent, updatedValue);\n  },\n  markInvalid: function () {\n    this.$el.addClass(errorClass);\n  },\n  clearInvalid: function () {\n    this.$el.removeClass(errorClass);\n  },\n  getPlaceholderText: function () {\n    const text = ['Enter'];\n    text.push(getArticle(this.options.itemType));\n    text.push(this.options.itemType.toLowerCase());\n    return text.join(' ');\n  },\n  getErrorExplainText: function () {\n    const text = ['Value must be'];\n    text.push(getArticle(this.options.itemType));\n    text.push(this.options.itemType.toLowerCase());\n    return text.join(' ');\n  },\n  parseInt: function (string) {\n    // native javascript parseInt is aggressive\n    // there're cases we don't want a string to be parsed even though it is convertable\n    // so that we don't convert a string silently before warning a user the potential error\n    // this is to make sure the string is in an integer format before we parse it\n    if (/^-?\\d+$/.test(string)) {\n      const num = parseInt(string, 10);\n      return !oktaUnderscore.isNaN(num) ? num : string;\n    }\n\n    return string;\n  }\n});\n\nexport { DeletableBox as default };\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport SchemaUtils from '../../../util/SchemaUtil.js';\nimport BaseInput from '../BaseInput.js';\nimport DeletableBox from './DeletableBox.js';\n\nvar TextBoxSet = BaseInput.extend({\n  className: 'array-input',\n  template: _Handlebars2.template({\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<a href=\\\"#\\\" class=\\\"array-inputs-button link-button\\\">\" + container.escapeExpression((lookupProperty(helpers, \"i18n\") || depth0 && lookupProperty(depth0, \"i18n\") || container.hooks.helperMissing).call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"i18n\",\n        \"hash\": {\n          \"bundle\": \"courage\",\n          \"code\": \"oform.add.another\"\n        },\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 52\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 102\n          }\n        }\n      })) + \"</a>\";\n    },\n    \"useData\": true\n  }),\n  params: {\n    itemType: 'string'\n  },\n  events: {\n    'click .array-inputs-button': function (e) {\n      e.preventDefault();\n\n      if (this.isEditMode()) {\n        this.addNewElement();\n      }\n    }\n  },\n  initialize: function (options) {\n    options || (options = {});\n    this.params = oktaUnderscore.defaults(options.params || {}, this.params);\n    this.uniqueIdPrefix = 'array';\n  },\n  // api returns null for an array that does not have value\n  // convert it to an empty array\n  from: function (val) {\n    if (!oktaUnderscore.isArray(val)) {\n      return [];\n    }\n\n    return val;\n  },\n  // @Override\n  editMode: function () {\n    this._setArrayObject();\n\n    this.$el.html(this.template);\n\n    oktaUnderscore.each(this.arrayObject, oktaUnderscore.bind(this._addDeletableBox, this));\n\n    return this;\n  },\n  // @Override\n  readMode: function () {\n    this.editMode();\n    this.$('.array-inputs-button').addClass('link-button-disabled');\n  },\n  // @Override\n  // converts arrayObject to a plain array\n  // for string type array, returns all values\n  // for number/integer type array, returns values in number type\n  val: function () {\n    let values = oktaUnderscore.values(this.arrayObject);\n\n    if (oktaUnderscore.contains([SchemaUtils.DATATYPE.number, SchemaUtils.DATATYPE.integer], this.params.itemType)) {\n      values = oktaUnderscore.filter(values, oktaUnderscore.isNumber);\n    }\n\n    return values;\n  },\n  focus: function () {},\n  addNewElement: function () {\n    const value = '';\n\n    const key = oktaUnderscore.uniqueId(this.uniqueIdPrefix);\n\n    this.arrayObject[key] = value;\n\n    this._addDeletableBox(value, key); // update is called to make sure an empty string value is added for string type array\n\n\n    this.update();\n  },\n  _addDeletableBox: function (value, key) {\n    const deletableBox = new DeletableBox(oktaUnderscore.extend(oktaUnderscore.pick(this.options, 'read', 'readOnly', 'model'), {\n      key: key,\n      value: value,\n      itemType: this.params.itemType\n    }));\n    this.listenTo(deletableBox, 'updateArray', function (updatedValue) {\n      if (oktaUnderscore.isNull(updatedValue)) {\n        delete this.arrayObject[key];\n        this.stopListening(deletableBox);\n      } else {\n        this.arrayObject[key] = updatedValue;\n      }\n\n      this.update();\n    });\n    deletableBox.render().$el.hide();\n    this.$('.array-inputs-button').before(deletableBox.el);\n    deletableBox.$el.slideDown();\n    return deletableBox;\n  },\n  _setArrayObject: function () {\n    const array = this.model.get(this.options.name);\n    this.arrayObject = {};\n\n    if (oktaUnderscore.isArray(array) && !oktaUnderscore.isEmpty(array)) {\n      const keys = [];\n      const self = this;\n\n      oktaUnderscore(array.length).times(function () {\n        keys.push(oktaUnderscore.uniqueId(self.uniqueIdPrefix));\n      });\n\n      this.arrayObject = oktaUnderscore.object(keys, array);\n    }\n  }\n});\n\nexport { TextBoxSet as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport StringUtil from '../../../util/StringUtil.js';\nimport BooleanSelect from '../inputs/BooleanSelect.js';\nimport TextBoxSet from '../inputs/TextBoxSet.js';\nimport EnumTypeHelper from './EnumTypeHelper.js';\n\n/* eslint max-statements: 0, max-params: 0 */\n\nfunction convertStringToNumber(string) {\n  const number = StringUtil.parseFloat(string);\n  return string === '' ? null : number;\n} // converts possibleValues to choices\n// [a, b, c] => {a: a, b: b, c: c}\n\n\nfunction getChoices(values) {\n  return oktaUnderscore.object(values, values);\n}\n\nfunction isArray(type) {\n  return type && type.indexOf('array') >= 0;\n} // A schema property may have an objectName either\n// at the root level or nested in the items object\n\n\nfunction getObjectName(schemaProp) {\n  const items = schemaProp.get('items');\n\n  if (items) {\n    return items.objectName;\n  }\n\n  return schemaProp.get('objectName');\n}\n/**\n * Checks the validity of a schema property.\n *\n * @param {SchemaProperty} [schemaProp] A schema property backbone model\n * @param {Object} [values] An object of the form { key: [value1, value2]}\n * @return {Boolean} true/false\n * @private\n */\n\n\nfunction isValidSchemaProp(schemaProp, values) {\n  const objectName = getObjectName(schemaProp);\n  const results = values[objectName]; // a schema property that references an empty list of values\n  // Im looking at you, google apps.\n\n  if (objectName && oktaUnderscore(results).isEmpty()) {\n    return false;\n  }\n\n  return true;\n} // Maps each __displayType__ to a basic set of inputOptions.\n\n\nfunction defaultOptions(property) {\n  const type = property.get('__displayType__');\n  const values = property.get('__possibleValues__');\n  const name = property.get('name');\n  const title = property.get('title');\n  /* eslint complexity: [2, 24] */\n\n  const inputOptions = {\n    type: 'text',\n    name: name,\n    label: title || name\n  }; // @see customOptions for enum complex \"object\" type,\n  // a.k.a \"object\" or \"arrayofobject\" type has enum values defined.\n  // Other cases (e.g., nested object type) are not support yet.\n\n  switch (type) {\n    case 'arrayofstring':\n      inputOptions.input = TextBoxSet;\n      inputOptions.params = {\n        itemType: 'string'\n      };\n      break;\n\n    case 'arrayofnumber':\n      inputOptions.input = TextBoxSet;\n      inputOptions.params = {\n        itemType: 'number'\n      };\n      break;\n\n    case 'arrayofinteger':\n      inputOptions.input = TextBoxSet;\n      inputOptions.params = {\n        itemType: 'integer'\n      };\n      break;\n\n    case 'arrayofobject':\n      inputOptions.input = TextBoxSet;\n      inputOptions.params = {\n        itemType: property.get('items').type\n      };\n      break;\n\n    case 'arrayofref-id':\n      inputOptions.input = TextBoxSet;\n      inputOptions.params = {\n        itemType: property.get('items').format\n      };\n      break;\n\n    case 'boolean':\n      inputOptions.input = BooleanSelect;\n      break;\n\n    case 'integer':\n    case 'number':\n      inputOptions.to = convertStringToNumber;\n      break;\n\n    case 'reference':\n      inputOptions.type = 'select';\n      inputOptions.options = getChoices(values);\n      break;\n\n    case 'image':\n      inputOptions.readOnly = true;\n\n      inputOptions.from = function (value) {\n        return oktaUnderscore.isEmpty(value) ? '' : StringUtil.localize('user.profile.image.image_set', 'courage'); // TODO\n      };\n\n      break;\n\n    case 'password':\n      inputOptions.type = 'password';\n      break;\n\n    case 'date':\n      inputOptions.type = 'date';\n      break;\n\n    case 'uri':\n    case 'country-code':\n    case 'country_code':\n    case 'language-code':\n    case 'language_code':\n    case 'email':\n    case 'locale':\n    case 'timezone':\n    case 'string':\n    case 'object':\n      // default input options\n      break;\n\n    default:\n      throw new Error(`unknown type: ${type}`);\n  }\n\n  return inputOptions;\n} // Sets nonbasic inputOptions, such as an array with possible values\n\n\nfunction customOptions(property) {\n  let inputOptions = {};\n  const name = property.get('name');\n  const type = property.get('__displayType__');\n  const values = property.get('__possibleValues__');\n  const prefix = property.get('__fieldNamePrefix__');\n\n  if (prefix) {\n    inputOptions.name = prefix + name;\n    inputOptions.errorField = name;\n  }\n\n  if (property.isEnumType()) {\n    const configs = {\n      displayType: type,\n      title: property.get('title'),\n      enumValues: property.getEnumValues()\n    };\n    inputOptions = oktaUnderscore.extend({}, EnumTypeHelper.getEnumInputOptions(configs), inputOptions);\n  } else if (isArray(type) && values) {\n    inputOptions.type = 'checkboxset';\n    inputOptions.input = null;\n    inputOptions.options = getChoices(values);\n  }\n\n  return inputOptions;\n}\n\nfunction augmentSchemaProp(schemaProp, possibleValues, profile) {\n  const name = schemaProp.get('name');\n  const prefix = profile.__nestedProperty__;\n  let defaultValues = possibleValues[name];\n  const userValues = profile.get(name);\n  let values; // If API responds with a field name that differs from the form-field name\n  // example: Model's 'profile.username' vs. server's 'username'\n\n  if (prefix) {\n    schemaProp.set('__fieldNamePrefix__', prefix);\n  } // case 1: objectName - fixed list of values are set for the input\n\n\n  const fixedValues = possibleValues[getObjectName(schemaProp)]; // case 2: name only - default list of values are provided, user can add more\n  // TODO: this case does not yet exist, so it is not tested\n\n  if (defaultValues && userValues) {\n    defaultValues = oktaUnderscore.union(defaultValues, userValues);\n  } // If both fixed and default values exist,\n  // take the fixed values unless they are empty\n\n\n  if (fixedValues && fixedValues.length) {\n    values = fixedValues;\n  } else if (defaultValues && defaultValues.length) {\n    values = defaultValues;\n  }\n\n  schemaProp.set('__possibleValues__', values);\n}\n\nfunction augmentSchemaProps(schemaProps, possibleValues, profile) {\n  schemaProps.each(function (schemaProp) {\n    augmentSchemaProp(schemaProp, possibleValues, profile);\n  });\n  return schemaProps;\n}\n/**\n * Remove invalid schema properties from a collection\n *\n * @param {SchemaProperties Collection} [properties] A collection of schema properties\n * @param {Object} [values] An object of the form { key: [value1, value2]}\n * @return {Array} An array of valid schema models, this can be used to reset\n * a schema properties collection for example.\n * @private\n */\n\n\nfunction cleanSchema(properties, values) {\n  return properties.filter(function (schema) {\n    return isValidSchemaProp(schema, values);\n  });\n}\n\nvar SchemaFormFactory = {\n  /**\n   * Creates the options hash for BaseForm.addInput from a prepared schema\n   * property.\n   *\n   * @param {Okta.Model} [preparedSchemaProp] A schema property backbone model\n   * that has been standardized by the prepareSchema method.\n   * @return {Object} An object containing all of the options needed by\n   * BaseForm's addInput()\n   */\n  createInputOptions: function (preparedSchemaProp) {\n    const custom = customOptions(preparedSchemaProp);\n    const standard = defaultOptions(preparedSchemaProp); // underscore did not support nested extend\n    // https://github.com/jashkenas/underscore/issues/162\n\n    if (custom.params && standard.params) {\n      custom.params = oktaUnderscore.defaults(custom.params, standard.params);\n    }\n\n    return oktaUnderscore.defaults(custom, standard);\n  },\n  hasValidSchemaProps: function (schemaProps, possibleValues) {\n    if (oktaUnderscore.isEmpty(schemaProps)) {\n      return false;\n    }\n\n    const validSchema = cleanSchema(schemaProps, possibleValues);\n    return !!validSchema.length;\n  },\n\n  /**\n   * This method is responsible for preparing a collection for the form\n   * factory to use by putting all of the information to create an input\n   * into the schema property and removing invalid properties.\n   * The typical UD form takes 3 models:\n   * The data model has the input values.\n   * The schema model describes which input to use, such as a textbox or a checkbox.\n   * The possible values model provide a list of default options to display, for example in a drop down menu.\n   *\n   * @param {SchemaProperty Collection} [schemaProps] A schema property backbone model.\n   * @param {Object} [possibleValues] An object of the form { key: [value1, value2]}\n   * @param {Okta.Model} [profile] A backbone model containing the property described by the schema property.\n   * @return {SchemaProperty Collection} A schema property collection with standardized models.\n   * The standard schema model adds a couple of additional private properties to\n   * allow the form factory to reference lookup values or name prefixes without going to a second model.\n   */\n  prepareSchema: function (schemaProps, possibleValues, profile) {\n    schemaProps.reset(cleanSchema(schemaProps, possibleValues));\n    return augmentSchemaProps(schemaProps, possibleValues, profile);\n  },\n\n  /**\n   * `prepareSchema` will reset the property list which may not be necessary at some case.\n   * like when setting default value for schema properties.\n   * (more detail about such case @see wiki UX, App+Entitlements+for+Provisioning)\n   *\n   * @param { }\n   * @return {String}\n   */\n  augmentSchemaProps: augmentSchemaProps,\n  augmentSchemaProp: augmentSchemaProp\n};\n\nexport { SchemaFormFactory as default };\n","import $ from 'jquery';\n\n/**\n * There are following local modifications:\n * - Author: Uzi Kilon ukilon@okta.com\n *   Bug: OKTA-20830 - solves the conflict when there are multiple labels\n */\n\n/**\n * --------------------------------------------------------------------\n * jQuery customInput plugin\n * Author: Maggie Costello Wachs maggie@filamentgroup.com, Scott Jehl, scott@filamentgroup.com\n * Copyright (c) 2009 Filament Group\n * licensed under MIT (filamentgroup.com/examples/mit-license.txt)\n * --------------------------------------------------------------------\n*/\n(function () {\n  var jQuery = $;\n\n  var $$1 = jQuery;\n\n  jQuery.fn.customInput = function () {\n    return $$1(this).each(function () {\n      if ($$1(this).is('[type=checkbox],[type=radio]')) {\n        var input = $$1(this); // get the associated label using the input's id\n\n        var label = input.siblings('label[for=\"' + input.attr('id') + '\"]:first');\n\n        if (!label.length) {\n          label = input.closest('label[for=\"' + input.attr('id') + '\"]:first');\n        } // wrap the input + label in a div\n\n\n        input.add(label).wrapAll('<div class=\"custom-' + input.attr('type') + '\"></div>'); // necessary for browsers that don't support the :hover pseudo class on labels\n\n        label.hover(function () {\n          $$1(this).addClass('hover');\n        }, function () {\n          $$1(this).removeClass('hover');\n        }); //bind custom event, trigger it, bind click,focus,blur events\n\n        input.bind('updateState', function () {\n          input.is(':checked') ? label.addClass('checked') : label.removeClass('checked checkedHover checkedFocus');\n        }).trigger('updateState').click(function () {\n          $$1('input[name=\"' + $$1(this).attr('name') + '\"]').trigger('updateState');\n        }).focus(function () {\n          label.addClass('focus');\n\n          if (input.is(':checked')) {\n            $$1(this).addClass('checkedFocus');\n          }\n        }).blur(function () {\n          label.removeClass('focus checkedFocus');\n        });\n      }\n    });\n  };\n})();\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport Keys from '../../../util/Keys.js';\nimport '../../../vendor/plugins/jquery.custominput.js';\nimport BaseInput from '../BaseInput.js';\n\nvar CheckBox = BaseInput.extend({\n  template: _Handlebars2.template({\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          alias2 = container.hooks.helperMissing,\n          alias3 = \"function\",\n          alias4 = container.escapeExpression,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<input type=\\\"checkbox\\\" name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"name\") || (depth0 != null ? lookupProperty(depth0, \"name\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"name\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 29\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 37\n          }\n        }\n      }) : helper)) + \"\\\" id=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"inputId\") || (depth0 != null ? lookupProperty(depth0, \"inputId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"inputId\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 43\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 54\n          }\n        }\n      }) : helper)) + \"\\\"/><label for=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"inputId\") || (depth0 != null ? lookupProperty(depth0, \"inputId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"inputId\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 69\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 80\n          }\n        }\n      }) : helper)) + \"\\\" data-se-for-name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"name\") || (depth0 != null ? lookupProperty(depth0, \"name\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"name\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 100\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 108\n          }\n        }\n      }) : helper)) + \"\\\">\" + alias4((helper = (helper = lookupProperty(helpers, \"placeholder\") || (depth0 != null ? lookupProperty(depth0, \"placeholder\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"placeholder\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 110\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 125\n          }\n        }\n      }) : helper)) + \"</label>\";\n    },\n    \"useData\": true\n  }),\n\n  /**\n   * @Override\n   */\n  events: {\n    'change :checkbox': 'update',\n    keyup: function (e) {\n      e.preventDefault();\n\n      if (Keys.isSpaceBar(e)) {\n        this.$(':checkbox').click();\n      } else if (Keys.isEnter(e)) {\n        this.model.trigger('form:save');\n      }\n    }\n  },\n\n  /**\n   * @Override\n   */\n  editMode: function () {\n    let placeholder = oktaUnderscore.resultCtx(this.options, 'placeholder', this);\n\n    if (placeholder === '') {\n      placeholder = oktaUnderscore.resultCtx(this.options, 'label', this);\n    } else if (placeholder === false) {\n      placeholder = '';\n    }\n\n    this.$el.html(this.template(oktaUnderscore.extend(oktaUnderscore.omit(this.options, 'placeholder'), {\n      placeholder: placeholder\n    })));\n    const $input = this.$(':checkbox');\n    $input.prop('checked', this.getModelValue() || false);\n    this.$('input').customInput();\n    this.model.trigger('form:resize');\n    return this;\n  },\n\n  /**\n   * @Override\n   */\n  readMode: function () {\n    this.editMode();\n    this.$(':checkbox').prop('disabled', true);\n    return this;\n  },\n\n  /**\n   * @Override\n   */\n  val: function () {\n    return this.$(':checkbox').prop('checked');\n  },\n\n  /**\n   * @Override\n   */\n  focus: function () {\n    return this.$(':checkbox').focus();\n  }\n});\n\nexport { CheckBox as default };\n","import $ from 'jquery';\n\n/*! http://mths.be/placeholder v2.0.7 by @mathias */\n\n(function () {\n  var $$1 = $;\n\n  var isInputSupported = ('placeholder' in document.createElement('input')),\n      isTextareaSupported = ('placeholder' in document.createElement('textarea')),\n      prototype = $$1.fn,\n      valHooks = $$1.valHooks,\n      hooks,\n      placeholder;\n\n  if (isInputSupported && isTextareaSupported) {\n    placeholder = prototype.placeholder = function () {\n      return this;\n    };\n\n    placeholder.input = placeholder.textarea = true;\n  } else {\n    placeholder = prototype.placeholder = function () {\n      var $this = this;\n      $this.filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]').not('.placeholder').bind({\n        'focus.placeholder': clearPlaceholder,\n        'blur.placeholder': setPlaceholder\n      }).data('placeholder-enabled', true).trigger('blur.placeholder');\n      return $this;\n    };\n\n    placeholder.input = isInputSupported;\n    placeholder.textarea = isTextareaSupported;\n    hooks = {\n      'get': function (element) {\n        var $element = $$1(element);\n        return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;\n      },\n      'set': function (element, value) {\n        var $element = $$1(element);\n\n        if (!$element.data('placeholder-enabled')) {\n          return element.value = value;\n        }\n\n        if (value == '') {\n          element.value = value; // Issue #56: Setting the placeholder causes problems if the element continues to have focus.\n\n          if (element != document.activeElement) {\n            // We can't use `triggerHandler` here because of dummy text/password inputs :(\n            setPlaceholder.call(element);\n          }\n        } else if ($element.hasClass('placeholder')) {\n          clearPlaceholder.call(element, true, value) || (element.value = value);\n        } else {\n          element.value = value;\n        } // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363\n\n\n        return $element;\n      }\n    };\n    isInputSupported || (valHooks.input = hooks);\n    isTextareaSupported || (valHooks.textarea = hooks);\n    $$1(function () {\n      // Look for forms\n      $$1(document).delegate('form', 'submit.placeholder', function () {\n        // Clear the placeholder values so they don't get submitted\n        var $inputs = $$1('.placeholder', this).each(clearPlaceholder);\n        setTimeout(function () {\n          $inputs.each(setPlaceholder);\n        }, 10);\n      });\n    }); // Clear placeholder values upon page reload\n\n    $$1(window).bind('beforeunload.placeholder', function () {\n      $$1('.placeholder').each(function () {\n        this.value = '';\n      });\n    });\n  }\n\n  function args(elem) {\n    // Return an object of element attributes\n    var newAttrs = {},\n        rinlinejQuery = /^jQuery\\d+$/;\n    $$1.each(elem.attributes, function (i, attr) {\n      if (attr.specified && !rinlinejQuery.test(attr.name)) {\n        newAttrs[attr.name] = attr.value;\n      }\n    });\n    return newAttrs;\n  }\n\n  function clearPlaceholder(event, value) {\n    var input = this,\n        $input = $$1(input);\n\n    if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) {\n      if ($input.data('placeholder-password')) {\n        $input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id')); // If `clearPlaceholder` was called from `$.valHooks.input.set`\n\n        if (event === true) {\n          return $input[0].value = value;\n        }\n\n        $input.focus();\n      } else {\n        input.value = '';\n        $input.removeClass('placeholder');\n        input == document.activeElement && input.select();\n      }\n    }\n  }\n\n  function setPlaceholder() {\n    var $replacement,\n        input = this,\n        $input = $$1(input),\n        id = this.id;\n\n    if (input.value == '') {\n      if (input.type == 'password') {\n        if (!$input.data('placeholder-textinput')) {\n          try {\n            $replacement = $input.clone().attr({\n              'type': 'text'\n            });\n          } catch (e) {\n            $replacement = $$1('<input>').attr($$1.extend(args(this), {\n              'type': 'text'\n            }));\n          }\n\n          $replacement.removeAttr('name').data({\n            'placeholder-password': true,\n            'placeholder-id': id\n          }).bind('focus.placeholder', clearPlaceholder);\n          $input.data({\n            'placeholder-textinput': $replacement,\n            'placeholder-id': id\n          }).before($replacement);\n        }\n\n        $input = $input.removeAttr('id').hide().prev().attr('id', id).show(); // Note: `$input[0] != input` now!\n      }\n\n      $input.addClass('placeholder');\n      $input[0].value = $input.attr('placeholder');\n    } else {\n      $input.removeClass('placeholder');\n    }\n  }\n})();\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaJQueryStatic from '../../../util/jquery-wrapper.js';\nimport '@okta/qtip';\nimport Keys from '../../../util/Keys.js';\nimport '../../../vendor/plugins/jquery.placeholder.js';\nimport BaseInput from '../BaseInput.js';\n\nconst className = 'okta-form-input-field input-fix';\n\nfunction hasTitleAndText(options) {\n  const title = options.title;\n  const text = options.text;\n  return title && text && title !== text;\n} // options may be a string or an object.\n\n\nfunction createQtipContent(options) {\n  if (hasTitleAndText(options)) {\n    return options;\n  }\n\n  return {\n    text: options.text || options\n  };\n}\n\nvar TextBox = BaseInput.extend({\n  template: _Handlebars2.template({\n    \"1\": function (container, depth0, helpers, partials, data) {\n      return \"<span class=\\\"input-tooltip icon form-help-16\\\"></span>\";\n    },\n    \"3\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<span class=\\\"icon input-icon \" + container.escapeExpression(container.lambda((stack1 = depth0 != null ? lookupProperty(depth0, \"params\") : depth0) != null ? lookupProperty(stack1, \"icon\") : stack1, depth0)) + \"\\\"></span>\";\n    },\n    \"5\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return container.escapeExpression((helper = (helper = lookupProperty(helpers, \"autoComplete\") || (depth0 != null ? lookupProperty(depth0, \"autoComplete\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n        \"name\": \"autoComplete\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 333\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 349\n          }\n        }\n      }) : helper));\n    },\n    \"7\": function (container, depth0, helpers, partials, data) {\n      return \"off\";\n    },\n    \"9\": function (container, depth0, helpers, partials, data) {\n      return \"<span class=\\\"input-icon-divider\\\"></span>\";\n    },\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var stack1,\n          helper,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          alias2 = container.hooks.helperMissing,\n          alias3 = \"function\",\n          alias4 = container.escapeExpression,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return ((stack1 = lookupProperty(helpers, \"if\").call(alias1, (stack1 = depth0 != null ? lookupProperty(depth0, \"params\") : depth0) != null ? lookupProperty(stack1, \"innerTooltip\") : stack1, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(1, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 87\n          }\n        }\n      })) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, (stack1 = depth0 != null ? lookupProperty(depth0, \"params\") : depth0) != null ? lookupProperty(stack1, \"icon\") : stack1, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(3, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 87\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 166\n          }\n        }\n      })) != null ? stack1 : \"\") + \"<input type=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"type\") || (depth0 != null ? lookupProperty(depth0, \"type\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"type\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 179\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 187\n          }\n        }\n      }) : helper)) + \"\\\" placeholder=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"placeholder\") || (depth0 != null ? lookupProperty(depth0, \"placeholder\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"placeholder\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 202\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 217\n          }\n        }\n      }) : helper)) + \"\\\" name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"name\") || (depth0 != null ? lookupProperty(depth0, \"name\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"name\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 225\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 233\n          }\n        }\n      }) : helper)) + \"\\\" id=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"inputId\") || (depth0 != null ? lookupProperty(depth0, \"inputId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"inputId\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 239\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 250\n          }\n        }\n      }) : helper)) + \"\\\" value=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"value\") || (depth0 != null ? lookupProperty(depth0, \"value\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"value\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 259\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 268\n          }\n        }\n      }) : helper)) + \"\\\" aria-label=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"placeholder\") || (depth0 != null ? lookupProperty(depth0, \"placeholder\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"placeholder\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 282\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 297\n          }\n        }\n      }) : helper)) + \"\\\" autocomplete=\\\"\" + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, depth0 != null ? lookupProperty(depth0, \"autoComplete\") : depth0, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(5, data, 0),\n        \"inverse\": container.program(7, data, 0),\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 313\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 367\n          }\n        }\n      })) != null ? stack1 : \"\") + \"\\\" />\" + ((stack1 = lookupProperty(helpers, \"if\").call(alias1, (stack1 = depth0 != null ? lookupProperty(depth0, \"params\") : depth0) != null ? lookupProperty(stack1, \"iconDivider\") : stack1, {\n        \"name\": \"if\",\n        \"hash\": {},\n        \"fn\": container.program(9, data, 0),\n        \"inverse\": container.noop,\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 371\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 444\n          }\n        }\n      })) != null ? stack1 : \"\");\n    },\n    \"useData\": true\n  }),\n\n  /**\n   * @Override\n   */\n  events: {\n    'input input': 'update',\n    'change input': 'update',\n    'keydown input': 'update',\n    'compositionend input': function () {\n      this.isComposing = false;\n    },\n    'compositionstart input': function () {\n      this.isComposing = true;\n    },\n    'keyup input': function (e) {\n      if (Keys.isEnter(e) && !(window.okta && window.okta.enableIMESupport)) {\n        this.model.trigger('form:save');\n      } else if (Keys.isEsc(e)) {\n        this.model.trigger('form:cancel');\n      }\n    }\n  },\n  hasIMESupport: true,\n  constructor: function () {\n    BaseInput.apply(this, arguments);\n    this.$el.addClass('o-form-control');\n  },\n\n  /**\n   * @Override\n   */\n  editMode: function () {\n    this.$el.addClass(className);\n    BaseInput.prototype.editMode.apply(this, arguments);\n    this.$('input').placeholder();\n  },\n\n  /**\n   * @Override\n   */\n  readMode: function () {\n    BaseInput.prototype.readMode.apply(this, arguments);\n\n    if (this.options.type === 'password') {\n      this.$el.text('********');\n    }\n\n    this.$el.removeClass(className);\n  },\n\n  /**\n   * @Override\n   */\n  val: function () {\n    let inputValue = this.$('input[type=\"' + this.options.type + '\"]').val(); //IE will only read clear text pw if type=\"password\" is explicitly in selector\n\n    if (this.options.type !== 'password') {\n      inputValue = oktaJQueryStatic.trim(inputValue);\n    }\n\n    return inputValue;\n  },\n\n  /**\n   * @Override\n   */\n  focus: function () {\n    return this.$('input').focus();\n  },\n  postRender: function () {\n    const {\n      params: params\n    } = this.options;\n\n    if (params && params.innerTooltip) {\n      const content = createQtipContent(params.innerTooltip);\n      this.$('.input-tooltip').qtip({\n        content: content,\n        style: {\n          classes: 'okta-tooltip qtip-custom qtip-shadow'\n        },\n        position: {\n          my: 'bottom left',\n          // Note: qTip2 has a known issue calculating the tooltip offset when:\n          // 1. A container element has both:\n          //    a) position: relative/absolute\n          //    b) overlay: value other than 'visible'\n          // 2. The page is scrolled\n          //\n          // We set position:relative and overlay:auto on the body element,\n          // where both are required for:\n          // - Positioning the footer correctly\n          // - Displaying long pages in embedded browsers\n          //\n          // The original design called for a fixed position relative to the\n          // tooltip icon - this has been switched to \"relative to mouse, and\n          // update position when mouse moves\" because of this constraint.\n          target: 'mouse',\n          adjust: {\n            method: 'flip',\n            mouse: true,\n            y: -5,\n            x: 5\n          },\n          viewport: oktaJQueryStatic('body')\n        }\n      });\n    }\n  }\n});\n\nexport { TextBox as default };\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport TextBox from './TextBox.js';\n\nconst toggleTemplate = _Handlebars2.template({\n  \"compiler\": [8, \">= 4.3.0\"],\n  \"main\": function (container, depth0, helpers, partials, data) {\n    return \"<span class=\\\"password-toggle\\\"><span class=\\\"eyeicon visibility-16 button-show\\\"></span><span class=\\\"eyeicon visibility-off-16 button-hide\\\"></span></span>\";\n  },\n  \"useData\": true\n});\n\nconst toggleTimeout = 30000;\nvar PasswordBox = TextBox.extend({\n  initialize: function () {\n    if (this.__showPasswordToggle()) {\n      this.events['click .password-toggle .button-show'] = '__showPassword';\n      this.events['click .password-toggle .button-hide'] = '__hidePassword';\n    }\n\n    this.delegateEvents();\n  },\n  postRender: function () {\n    if (this.isEditMode() && this.__showPasswordToggle()) {\n      this.$el.append(toggleTemplate);\n      this.$el.find('input[type=\"password\"]').addClass('password-with-toggle');\n    }\n\n    TextBox.prototype.postRender.apply(this, arguments);\n  },\n\n  /**\n   * @Override\n   * Overrides the default val method in order to avoid whitespace trimming\n   */\n  val: function () {\n    return this.$('input[type=\"' + this.options.type + '\"]').val();\n  },\n  __showPasswordToggle: function () {\n    return this.options.params && this.options.params.showPasswordToggle;\n  },\n  __showPassword: function () {\n    // Turn off the spellcheck if the user decides to switch to regular input\n    // in order to prevent sending passwords to third party spellcheckers\n    this.$('input').attr('spellcheck', false);\n    TextBox.prototype.changeType.apply(this, ['text']);\n    this.$('.password-toggle .button-show').hide();\n    this.$('.password-toggle .button-hide').show();\n    this.passwordToggleTimer = oktaUnderscore.delay(() => {\n      this.__hidePassword();\n    }, toggleTimeout);\n  },\n  __hidePassword: function () {\n    TextBox.prototype.changeType.apply(this, ['password']);\n    this.$('.password-toggle .button-show').show();\n    this.$('.password-toggle .button-hide').hide(); // clear timeout\n\n    if (this.passwordToggleTimer) {\n      clearTimeout(this.passwordToggleTimer);\n    }\n  }\n});\n\nexport { PasswordBox as default };\n","import _Handlebars2 from '../../../../../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport oktaJQueryStatic from '../../../util/jquery-wrapper.js';\nimport oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport Keys from '../../../util/Keys.js';\nimport Util from '../../../util/Util.js';\nimport BaseView from '../../BaseView.js';\nimport '../../../vendor/plugins/jquery.custominput.js';\nimport BaseInput from '../BaseInput.js';\n\nconst isABaseView = Util.isABaseView;\nconst RadioRadioOption = BaseView.extend({\n  template: _Handlebars2.template({\n    \"compiler\": [8, \">= 4.3.0\"],\n    \"main\": function (container, depth0, helpers, partials, data) {\n      var helper,\n          alias1 = depth0 != null ? depth0 : container.nullContext || {},\n          alias2 = container.hooks.helperMissing,\n          alias3 = \"function\",\n          alias4 = container.escapeExpression,\n          lookupProperty = container.lookupProperty || function (parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n\n        return undefined;\n      };\n\n      return \"<input type=\\\"radio\\\" name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"name\") || (depth0 != null ? lookupProperty(depth0, \"name\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"name\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 26\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 34\n          }\n        }\n      }) : helper)) + \"\\\" data-se-name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"realName\") || (depth0 != null ? lookupProperty(depth0, \"realName\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"realName\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 50\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 62\n          }\n        }\n      }) : helper)) + \"\\\" value=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"value\") || (depth0 != null ? lookupProperty(depth0, \"value\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"value\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 71\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 80\n          }\n        }\n      }) : helper)) + \"\\\" id=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"optionId\") || (depth0 != null ? lookupProperty(depth0, \"optionId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"optionId\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 86\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 98\n          }\n        }\n      }) : helper)) + \"\\\"><label for=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"optionId\") || (depth0 != null ? lookupProperty(depth0, \"optionId\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"optionId\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 112\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 124\n          }\n        }\n      }) : helper)) + \"\\\" data-se-for-name=\\\"\" + alias4((helper = (helper = lookupProperty(helpers, \"realName\") || (depth0 != null ? lookupProperty(depth0, \"realName\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"realName\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 144\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 156\n          }\n        }\n      }) : helper)) + \"\\\" class=\\\"radio-label\\\">\" + alias4((helper = (helper = lookupProperty(helpers, \"label\") || (depth0 != null ? lookupProperty(depth0, \"label\") : depth0)) != null ? helper : alias2, typeof helper === alias3 ? helper.call(alias1, {\n        \"name\": \"label\",\n        \"hash\": {},\n        \"data\": data,\n        \"loc\": {\n          \"start\": {\n            \"line\": 1,\n            \"column\": 178\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 187\n          }\n        }\n      }) : helper)) + \"</label>\";\n    },\n    \"useData\": true\n  }),\n  initialize: function (options) {\n    let explain;\n    explain = options.explain;\n\n    if (oktaUnderscore.isFunction(explain) && !isABaseView(explain)) {\n      explain = oktaUnderscore.resultCtx(this.options, 'explain', this);\n    }\n\n    if (!explain) {\n      return;\n    }\n\n    if (isABaseView(explain)) {\n      this.add('<p class=\"o-form-explain\"></p>', '.radio-label');\n      this.add(explain, '.o-form-explain');\n    } else {\n      this.add(BaseView.extend({\n        className: 'o-form-explain',\n        tagName: 'p',\n        template: _Handlebars2.template({\n          \"compiler\": [8, \">= 4.3.0\"],\n          \"main\": function (container, depth0, helpers, partials, data) {\n            var helper,\n                lookupProperty = container.lookupProperty || function (parent, propertyName) {\n              if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n                return parent[propertyName];\n              }\n\n              return undefined;\n            };\n\n            return container.escapeExpression((helper = (helper = lookupProperty(helpers, \"explain\") || (depth0 != null ? lookupProperty(depth0, \"explain\") : depth0)) != null ? helper : container.hooks.helperMissing, typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {\n              \"name\": \"explain\",\n              \"hash\": {},\n              \"data\": data,\n              \"loc\": {\n                \"start\": {\n                  \"line\": 1,\n                  \"column\": 0\n                },\n                \"end\": {\n                  \"line\": 1,\n                  \"column\": 11\n                }\n              }\n            }) : helper));\n          },\n          \"useData\": true\n        })\n      }), '.radio-label');\n    }\n  }\n});\nvar Radio = BaseInput.extend({\n  /**\n   * @Override\n   */\n  events: {\n    'change :radio': 'update',\n    keyup: function (e) {\n      if (Keys.isSpaceBar(e)) {\n        oktaJQueryStatic(e.target).click();\n      } else if (Keys.isEnter(e)) {\n        this.model.trigger('form:save');\n      }\n    }\n  },\n\n  /**\n   * @Override\n   */\n  editMode: function () {\n    const templates = [];\n    this.$el.empty();\n\n    oktaUnderscore.each(this.options.options, function (value, key) {\n      const options = {\n        optionId: oktaUnderscore.uniqueId('option'),\n        name: this.options.inputId,\n        realName: this.options.name,\n        value: key\n      };\n\n      if (!oktaUnderscore.isObject(value)) {\n        value = {\n          label: value\n        };\n      }\n\n      oktaUnderscore.extend(options, value);\n\n      templates.push(new RadioRadioOption(options).render().el);\n    }, this);\n\n    this.$el.append(templates);\n    let value = this.getModelValue();\n\n    if (value) {\n      this.$(':radio[value=' + value + ']').prop('checked', true);\n    }\n\n    this.$('input').customInput();\n    this.model.trigger('form:resize');\n\n    if (this.getParam('inline') === true) {\n      this.$('div.custom-radio').addClass('inline');\n    }\n\n    return this;\n  },\n\n  /**\n   * @Override\n   */\n  readMode: function () {\n    this.editMode();\n    this.$(':radio').prop('disabled', true);\n    return this;\n  },\n\n  /**\n   * @Override\n   */\n  val: function () {\n    return this.$(':radio:checked').val();\n  },\n\n  /**\n   * @Override\n   */\n  focus: function () {\n    return this.$('label:eq(0)').focus();\n  }\n});\n\nexport { Radio as default };\n","import oktaUnderscore from '../../../util/underscore-wrapper.js';\nimport ButtonFactory from '../../../util/ButtonFactory.js';\nimport BaseView from '../../BaseView.js';\nimport BaseInput from '../BaseInput.js';\n\nfunction countInputs(inputs) {\n  return oktaUnderscore.filter(inputs || [], function (input) {\n    return !oktaUnderscore.contains(['label', 'button', 'select'], input.type);\n  }).length;\n}\n\nconst InputGroupLabelInput = BaseInput.extend({\n  tagName: 'span',\n  initialize: function () {\n    this.$el.text(this.getModelValue());\n  },\n  editMode: function () {\n    this.toggle(true);\n  },\n  readMode: function () {\n    this.toggle(false);\n  },\n  getModelValue: function () {\n    return this.options.label;\n  },\n  toggle: function (isEditMode) {\n    this.$el.toggleClass('o-form-label-inline', isEditMode);\n    this.$el.toggleClass('o-form-control', !isEditMode);\n  },\n  focus: oktaUnderscore.noop\n});\n\nfunction createButtonInput(options) {\n  return ButtonFactory.create(oktaUnderscore.defaults({\n    getReadModeString: oktaUnderscore.constant(' '),\n    focus: oktaUnderscore.noop\n  }, oktaUnderscore.pick(options, 'click', 'title', 'href', 'icon')));\n}\n\nconst InputGroupInputGroupView = BaseView.extend({\n  getParams: BaseInput.prototype.getParams,\n  getParam: BaseInput.prototype.getParam,\n  className: function () {\n    let className; // Allows views to group multiple inputs under one label without any of the other\n    // styling/rendering changes that come with using a group input\n\n    if (this.getParam('noBaseClasses')) {\n      return '';\n    }\n\n    if (this.getParam('display') === 'text') {\n      className = 'o-form-input-group-subtle';\n    } else {\n      className = 'o-form-input-group';\n    }\n\n    if (countInputs(this.getParam('inputs')) > 1) {\n      className += ' o-form-input-group-2';\n    }\n\n    return className;\n  },\n  initialize: function () {\n    oktaUnderscore.each(this.getParam('inputs'), function (input) {\n      switch (input.type) {\n        case 'label':\n          this.add(InputGroupLabelInput, {\n            options: input\n          });\n          break;\n\n        case 'button':\n          this.add(createButtonInput(input));\n          break;\n\n        default:\n          input = oktaUnderscore.defaults({\n            model: this.model,\n            params: oktaUnderscore.extend({\n              autoWidth: true\n            }, input.params || {})\n          }, input);\n          this.add(this.getParams().create(input));\n      }\n    }, this);\n  },\n  focus: function () {\n    this.first().focus();\n  }\n});\nvar InputGroup = BaseInput.extend({\n  constructor: function (options) {\n    this.inputGroupView = new InputGroupInputGroupView(options);\n    BaseInput.apply(this, arguments);\n  },\n  editMode: function () {\n    this.inputGroupView.remove();\n    this.inputGroupView = new InputGroupInputGroupView(this.options);\n    this.$el.html(this.inputGroupView.render().el);\n  },\n  readMode: function () {\n    // Allows the user to use to the default \"read mode\" of the child inputs instead of\n    // rendering a single read mode string for all the child inputs\n    if (this.getParam('useChildInputsReadMode')) {\n      this.editMode();\n    } else {\n      BaseInput.prototype.readMode.apply(this, arguments);\n    }\n  },\n  toStringValue: function () {\n    const strings = this.inputGroupView.map(function (input) {\n      return input.getReadModeString();\n    });\n    return strings.length && oktaUnderscore.every(strings) ? strings.join(' ') : ' ';\n  },\n  focus: function () {\n    this.inputGroupView.focus();\n  }\n}, {\n  // test hooks\n  LabelInput: InputGroupLabelInput,\n  InputGroupView: InputGroupInputGroupView\n});\n\nexport { InputGroup as default };\n","import oktaJQueryStatic from '../courage/util/jquery-wrapper.js';\n\n/*!\n * jQuery UI Scroll Parent @VERSION\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Modifications Copyright 2021 Okta, Inc.\n */\n// This is required because SIW doesn't want to include jqueryui even though it's an external dependency of courage\n\noktaJQueryStatic.fn.scrollParent = function (includeHidden) {\n  const position = this.css(\"position\"),\n        excludeStaticParent = position === \"absolute\",\n        overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n        scrollParent = this.parents().filter(function () {\n    const parent = oktaJQueryStatic(this);\n\n    if (excludeStaticParent && parent.css(\"position\") === \"static\") {\n      return false;\n    }\n\n    return overflowRegex.test(parent.css(\"overflow\") + parent.css(\"overflow-y\") + parent.css(\"overflow-x\"));\n  }).eq(0);\n  return position === \"fixed\" || !scrollParent.length ? oktaJQueryStatic(this[0].ownerDocument || document) : scrollParent;\n};\n","import BaseCollection from './courage/models/BaseCollection.js';\nexport { default as BaseModel } from './courage/models/BaseModel.js';\nimport BaseSchema from './courage/models/BaseSchema.js';\nexport { default as Model } from './courage/models/Model.js';\nimport SchemaProperty from './courage/models/SchemaProperty.js';\nimport BaseController from './courage/util/BaseController.js';\nimport BaseRouter from './courage/util/BaseRouter.js';\nimport ButtonFactory from './courage/util/ButtonFactory.js';\nimport Class from './courage/util/Class.js';\nimport Cookie from './courage/util/Cookie.js';\nimport Clipboard from './courage/util/Clipboard.js';\nimport Keys from './courage/util/Keys.js';\nimport Logger from './courage/util/Logger.js';\nimport StringUtil from './courage/util/StringUtil.js';\nimport Util from './courage/util/Util.js';\nexport { default as Handlebars } from '../lib/handlebars/dist/cjs/handlebars.runtime.js';\nimport './courage/util/handlebars/handle-url.js';\nimport './courage/util/handlebars/helper-i18n.js';\nexport { default as $ } from './courage/util/jquery-wrapper.js';\nexport { default as _ } from './courage/util/underscore-wrapper.js';\nexport { default as ListView } from './courage/views/Backbone.ListView.js';\nimport BaseView from './courage/views/BaseView.js';\nimport BaseDropDown from './courage/views/components/BaseDropDown.js';\nimport Notification from './courage/views/components/Notification.js';\nimport BaseForm from './courage/views/forms/BaseForm.js';\nimport Toolbar from './courage/views/forms/components/Toolbar.js';\nimport FormUtil from './courage/views/forms/helpers/FormUtil.js';\nimport InputRegistry from './courage/views/forms/helpers/InputRegistry.js';\nimport SchemaFormFactory from './courage/views/forms/helpers/SchemaFormFactory.js';\nimport BaseInput from './courage/views/forms/BaseInput.js';\nimport CheckBox from './courage/views/forms/inputs/CheckBox.js';\nimport PasswordBox from './courage/views/forms/inputs/PasswordBox.js';\nimport Radio from './courage/views/forms/inputs/Radio.js';\nimport Select from './courage/views/forms/inputs/Select.js';\nimport InputGroup from './courage/views/forms/inputs/InputGroup.js';\nimport TextBox from './courage/views/forms/inputs/TextBox.js';\nimport Callout from './courage/views/components/Callout.js';\nexport { default as Backbone } from './courage/vendor/lib/backbone.js';\nimport FrameworkView from './courage/framework/View.js';\nexport { default as FrameworkView } from './courage/framework/View.js';\nimport './util/scrollParent.js';\nexport { isModelPropertySchema } from './courage/framework/Model.js';\nimport './courage/util/SettingsModel.js';\n\nconst Controller = BaseController.extend({\n  // The courage BaseController renders asynchronously in current versions of jQuery\n  // https://github.com/okta/okta-ui/blob/master/packages/courage/src/util/BaseController.ts#L117-L119\n  // https://api.jquery.com/jquery/#jQuery-callback\n  // Override so that render is synchronous\n  render: function (...args) {\n    BaseView.prototype.render.apply(this, args);\n    return this;\n  }\n});\n\nSelect.prototype.remove = function () {\n  // Patched to remove unneeded call to\n  // this.$select.trigger('remove');\n  // which causes error on IE11\n  return BaseInput.prototype.remove.apply(this, arguments);\n}; // The string will be returned unchanged. All templates should be precompiled.\n\n\nFrameworkView.prototype.compileTemplate = function (str) {\n  const compiledTmpl = function fakeTemplate() {\n    return str;\n  };\n\n  compiledTmpl.source = ''; // to satisfy TS\n\n  return compiledTmpl;\n}; // Override events to not support `Enter` submitting the form twice - OKTA-321999 and OKTA-317629\n\n\nconst events = {\n  'input input': 'update',\n  'change input': 'update',\n  'keydown input': 'update',\n  'keyup input': function (e) {\n    if (Keys.isEsc(e)) {\n      this.model.trigger('form:cancel');\n    }\n  }\n};\nconst TextBoxForSigninWidget = TextBox.extend({\n  events: events\n});\nconst PasswordBoxForSigninWidget = PasswordBox.extend({\n  events: events\n});\nconst Form = BaseForm.extend({\n  scrollOnError: function () {\n    // scrollOnError is true by default. Override to false if `scrollOnError` has been set to false in widget settings.\n    const {\n      settings: settings\n    } = this.options;\n\n    if (settings.get('features.scrollOnError') === false) {\n      return false;\n    }\n\n    return true;\n  }\n});\nconst loc = StringUtil.localize;\nconst createButton = ButtonFactory.create;\nconst createCallout = Callout.create;\nconst registerInput = InputRegistry.register;\nconst Collection = BaseCollection;\nconst View = BaseView;\nconst Router = BaseRouter;\nconst internal = {\n  util: {\n    Util: Util,\n    Cookie: Cookie,\n    Clipboard: Clipboard,\n    Logger: Logger,\n    Class: Class,\n    Keys: Keys\n  },\n  views: {\n    components: {\n      BaseDropDown: BaseDropDown,\n      Notification: Notification\n    },\n    forms: {\n      helpers: {\n        FormUtil: FormUtil,\n        SchemaFormFactory: SchemaFormFactory\n      },\n      components: {\n        Toolbar: Toolbar\n      },\n      inputs: {\n        TextBox: TextBoxForSigninWidget,\n        PasswordBox: PasswordBoxForSigninWidget,\n        CheckBox: CheckBox,\n        Radio: Radio,\n        Select: Select,\n        InputGroup: InputGroup\n      }\n    }\n  },\n  models: {\n    BaseSchema: BaseSchema,\n    SchemaProperty: SchemaProperty\n  }\n};\nregisterInput('text', TextBoxForSigninWidget);\nregisterInput('password', PasswordBoxForSigninWidget);\nregisterInput('checkbox', CheckBox);\nregisterInput('radio', Radio);\nregisterInput('select', Select);\nregisterInput('group', InputGroup);\n\nexport { Collection, Controller, Form, Router, View, createButton, createCallout, internal, loc, registerInput };\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport default {\n  API_RATE_LIMIT: 30000, //milliseconds\n\n  WIDGET_LOGIN_CONTAINER_ID: 'okta-login-container',\n  WIDGET_CONTAINER_ID: 'okta-sign-in',\n  WIDGET_CONFIG_COLORS_ID: 'okta-sign-in-config-colors',\n\n  DIRECTION_BACK: 'DIRECTION_BACK',\n\n  RECOVERY_TYPE_PASSWORD: 'PASSWORD',\n  RECOVERY_TYPE_UNLOCK: 'UNLOCK',\n  RECOVERY_FACTOR_TYPE_SMS: 'SMS',\n  RECOVERY_FACTOR_TYPE_EMAIL: 'EMAIL',\n  RECOVERY_FACTOR_TYPE_CALL: 'CALL',\n\n  IOS: 'ios',\n  ANDROID: 'android',\n\n  ODA: 'oda',\n  MDM: 'mdm',\n\n  // Global success messages\n  SUCCESS: 'SUCCESS',\n  FORGOT_PASSWORD_EMAIL_SENT: 'FORGOT_PASSWORD_EMAIL_SENT',\n  UNLOCK_ACCOUNT_EMAIL_SENT: 'UNLOCK_ACCOUNT_EMAIL_SENT',\n\n  // Global error messages\n  CONFIG_ERROR: 'CONFIG_ERROR',\n  UNSUPPORTED_BROWSER_ERROR: 'UNSUPPORTED_BROWSER_ERROR',\n  OAUTH_ERROR: 'OAUTH_ERROR',\n  AUTH_STOP_POLL_INITIATION_ERROR: 'AUTH_STOP_POLL_INITIATION_ERROR',\n  U2F_ERROR: 'U2F_ERROR',\n  WEB_AUTHN_ERROR: 'WEB_AUTHN_ERROR',\n  WEBAUTHN_ABORT_ERROR: 'WEBAUTHN_ABORT_ERROR',\n  CONFIGURED_FLOW_ERROR: 'CONFIGURED_FLOW_ERROR',\n\n  // Enroll choice page types\n  ALL_OPTIONAL_NONE_ENROLLED: 'ALL_OPTIONAL_NONE_ENROLLED',\n  ALL_OPTIONAL_SOME_ENROLLED: 'ALL_OPTIONAL_SOME_ENROLLED',\n  HAS_REQUIRED_NONE_ENROLLED: 'HAS_REQUIRED_NONE_ENROLLED',\n  HAS_REQUIRED_SOME_REQUIRED_ENROLLED: 'HAS_REQUIRED_SOME_REQUIRED_ENROLLED',\n  HAS_REQUIRED_ALL_REQUIRED_ENROLLED: 'HAS_REQUIRED_ALL_REQUIRED_ENROLLED',\n\n  // Operations\n  PRIMARY_AUTH: 'PRIMARY_AUTH',\n  FORGOT_PASSWORD: 'FORGOT_PASSWORD',\n  UNLOCK_ACCOUNT: 'UNLOCK_ACCOUNT',\n\n  // Auth Types\n  SESSION_SSO: 'SESSION_SSO',\n  SESSION_STEP_UP: 'SESSION_STEP_UP',\n\n  //Registration\n  ACTIVATION_EMAIL_SENT: 'ACTIVATION_EMAIL_SENT',\n  REGISTRATION_COMPLETE: 'REGISTRATION_COMPLETE',\n  REGISTRATION_FAILED: 'REGISTRATION_FAILED',\n\n  //IDP Discovery\n  IDP_DISCOVERY: 'IDP_DISCOVERY',\n\n  //App Store Links\n  OKTA_VERIFY_APPLE_APP_STORE_URL: 'https://apps.apple.com/us/app/okta-verify/id490179405',\n  OKTA_VERIFY_GOOGLE_PLAY_STORE_URL: 'https://play.google.com/store/apps/details?id=com.okta.android.auth',\n\n  // Device Challenge Method\n  LOOPBACK_CHALLENGE: 'LOOPBACK',\n  CUSTOM_URI_CHALLENGE: 'CUSTOM_URI',\n  UNIVERSAL_LINK_CHALLENGE: 'UNIVERSAL_LINK',\n  APP_LINK_CHALLENGE: 'APP_LINK',\n  CHROME_DTC: 'CHROME_DTC',\n\n};\n","/* eslint-disable max-statements */\n/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 13], max-depth: [2, 3] */\nimport { _, loc } from '@okta/courage';\nimport Enums from './Enums';\nimport Logger from './Logger';\nimport BrowserFeatures from './BrowserFeatures';\n\nconst Util = {};\nconst ovDeepLink = 'redirect_uri=https://login.okta.com/oauth/callback';\n\nconst buildInputForParameter = function(name, value) {\n  const input = document.createElement('input');\n\n  input.name = name;\n  input.value = decodeURIComponent(value);\n  input.type = 'hidden';\n  return input;\n};\n\nconst buildSubmitInput = function() {\n  const input = document.createElement('input');\n  input.type = 'submit';\n  return input;\n};\n\nconst buildDynamicForm = function(url = '', method) {\n  const splitOnFragment = url.split('#');\n  const fragment = splitOnFragment[1];\n  const splitOnQuery = (splitOnFragment[0] || '').split('?');\n  const query = splitOnQuery[1];\n  let targetUrl = splitOnQuery[0];\n\n  if (fragment) {\n    targetUrl += '#' + fragment;\n  }\n\n  const form = document.createElement('form');\n\n  form.method = method;\n  form.style.display = 'none';\n  form.action = targetUrl;\n  if (query && query.length) {\n    const queryParts = query.split('&');\n\n    queryParts.forEach(queryPart => {\n      const parameterParts = queryPart.split('=');\n      const input = buildInputForParameter(parameterParts[0], parameterParts[1]);\n\n      form.appendChild(input);\n    });\n  }\n  form.appendChild(buildSubmitInput());\n\n  return form;\n};\n\n// eslint-disable-next-line complexity\nUtil.transformErrorXHR = function(xhr) {\n  // Handle network connection error\n  if (xhr.status === 0 && _.isEmpty(xhr.responseJSON)) {\n    xhr.responseJSON = { errorSummary: loc('error.network.connection', 'login') };\n    return xhr;\n  }\n  if (!xhr.responseJSON) {\n    if (!xhr.responseText) {\n      // Empty server response\n      xhr.responseJSON = { errorSummary: loc('error.unsupported.response', 'login') };\n      return xhr;\n    }\n    if (typeof xhr.responseText === 'string') {\n      try {\n        xhr.responseJSON = JSON.parse(xhr.responseText);\n      } catch (e) {\n        // Malformed server response\n        xhr.responseJSON = { errorSummary: loc('error.unsupported.response', 'login') };\n        return xhr;\n      }\n    } else if (typeof xhr.responseText === 'object') {\n      xhr.responseJSON = xhr.responseText;\n    }\n  }\n  // Temporary solution to display field errors\n  // Assuming there is only one field error in a response\n  if (xhr.responseJSON && xhr.responseJSON.errorCauses && xhr.responseJSON.errorCauses.length) {\n    xhr.responseJSON.errorSummary = xhr.responseJSON.errorCauses[0].errorSummary;\n  }\n  // Replace error messages\n  if (!_.isEmpty(xhr.responseJSON)) {\n    const errorMsg = loc('errors.' + xhr.responseJSON.errorCode, 'login');\n\n    if (errorMsg.indexOf('L10N_ERROR[') === -1) {\n      xhr.responseJSON.errorSummary = errorMsg;\n      if (xhr.responseJSON && xhr.responseJSON.errorCauses && xhr.responseJSON.errorCauses.length) {\n        // BaseForm will consume errorCauses before errorSummary if it is an array,\n        // so, we have to make sure to remove it when we have a valid error code\n        delete xhr.responseJSON.errorCauses;\n      }\n    }\n  }\n  return xhr;\n};\n\n// Simple helper function to lowercase all strings in the given array\nUtil.toLower = function(strings) {\n  return _.map(strings, function(str) {\n    return str.toLowerCase();\n  });\n};\n\n// A languageCode can be composed of multiple parts, i.e:\n// {{language}}-{{region}}-{{dialect}}\n//\n// In these cases, it's necessary to generate a list of other possible\n// combinations that we might support (in preferred order).\n//\n// For example:\n// en-US -> [en-US, en]\n// de-DE-bavarian -> [de-DE-bavarian, de-DE, de]\nfunction expandLanguage(language) {\n  const expanded = [language];\n  const parts = language.split('-');\n\n  while (parts.pop() && parts.length > 0) {\n    expanded.push(parts.join('-'));\n  }\n  return expanded;\n}\n\n// Following the rules of expanding one language, this will generate\n// all potential languages in the given order (where higher priority is\n// given to expanded languages over other downstream languages).\nUtil.expandLanguages = function(languages) {\n  return _.chain(languages).map(expandLanguage).flatten().uniq().value();\n};\n\n//helper to call setTimeout\nUtil.callAfterTimeout = function(callback, time) {\n  return setTimeout(callback, time);\n};\n\n// Helper function to provide consistent formatting of template literals\n// that are logged when in development mode.\nUtil.debugMessage = function(message) {\n  Logger.warn(`\\n${message.replace(/^(\\s)+/gm, '')}`);\n};\n\nUtil.logConsoleError = function(message) {\n  Logger.error(message);\n};\n\n// Trigger an afterError event\nUtil.triggerAfterError = function(controller, err = {}) {\n  if (!err.statusCode && err.xhr && err.xhr.status) {\n    // Bring the statusCode to the top-level of the Error\n    err.statusCode = err.xhr.status;\n  }\n  // Some controllers return the className as a function - process it here:\n  const className = _.isFunction(controller.className) ? controller.className() : controller.className;\n\n  const error = _.pick(err, 'name', 'message', 'statusCode', 'xhr');\n\n  controller.trigger('afterError', { controller: className }, error);\n  // Logs to console only in dev mode\n  Logger.warn('controller: ' + className + ', error: ' + error);\n};\n\nUtil.redirect = function(url, win = window, isAppLink = false) {\n  if (!url) {\n    Logger.error(`Cannot redirect to empty URL: (${url})`);\n    return;\n  }\n  if (BrowserFeatures.isAndroid() && !isAppLink) {\n    Util.redirectWithFormGet(url);\n  } else {\n    win.location.href = url;\n  }\n};\n\nUtil.isAndroidOVEnrollment = function() {\n  const ovEnrollment = decodeURIComponent(window.location.href).includes(ovDeepLink);\n  return BrowserFeatures.isAndroid() && ovEnrollment;\n};\n\n/**\n * Why redirect via Form get rather using `window.location.href`?\n * At the time of writing, Chrome (<72) in Android would block window location change\n * at following case\n * 1. An AJAX is trigger because of user action.\n * 2. 5+ seconds passed without any further user interaction.\n * 3. User takes an action results in window location change.\n *\n * Luckily we discovered that uses Form submit would work around this problem\n * even though it changed window location.\n *\n * Check the commit history for more details.\n */\nUtil.redirectWithFormGet = function(url) {\n  Util.redirectWithForm(url, 'get');\n};\n\nUtil.redirectWithForm = function(url, method = 'post') {\n  if (!url) {\n    Logger.error(`Cannot redirect to empty URL: (${url})`);\n    return;\n  }\n\n  const mainContainer = document.getElementById(Enums.WIDGET_CONTAINER_ID);\n\n  if (!mainContainer) {\n    Logger.error('Cannot find okta-sign-in container append to which a form');\n    return;\n  }\n\n  const form = buildDynamicForm(url, method);\n\n  mainContainer.appendChild(form);\n  form.querySelector('input[type=\"submit\"]').click();\n};\n\n/**\n * When we want to show an explain text, we need to check if this is different from\n * the label text, to not have an explain that look like a duplicated label.\n * okta-signin-widget gives the possibility to customize every i18n, so we cannot\n * know ahead if these two are equal or different, we need to call this function everytime.\n */\nUtil.createInputExplain = function(explainKey, labelKey, bundleName, explainParams, labelParams) {\n  const explain = explainParams ? loc(explainKey, bundleName, explainParams) : loc(explainKey, bundleName);\n  const label = labelParams ? loc(labelKey, bundleName, labelParams) : loc(labelKey, bundleName);\n\n  if (explain === label) {\n    return false;\n  }\n  return explain;\n};\n\nUtil.isV1StateToken = function(token) {\n  return !!(token && _.isString(token) && token.startsWith('00'));\n};\n\nUtil.getAutocompleteValue = function(settings, defaultValue) {\n  const shouldDisableAutocomplete = settings?.get('features.disableAutocomplete');\n  if (shouldDisableAutocomplete) {\n    return 'off';\n  }\n  return defaultValue;\n};\n\nexport default Util;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Model } from '@okta/courage';\nimport Q from 'q';\nimport Enums from 'util/Enums';\nconst KNOWN_ERRORS = ['OAuthError', 'AuthSdkError', 'AuthPollStopError', 'AuthApiError'];\nexport default Model.extend({\n  // May return either a \"standard\" promise or a Q promise\n  doTransaction: function(fn, rethrow) {\n    const self = this;\n\n    return fn\n      .call(this, this.appState.get('transaction'))\n      .then(function(trans) {\n        self.trigger('setTransaction', trans);\n        return trans;\n      })\n      .catch(function(err) {\n        // Q may still consider AuthPollStopError to be unhandled\n        if (\n          err.name === 'AuthPollStopError' ||\n          err.name === Enums.AUTH_STOP_POLL_INITIATION_ERROR ||\n          err.name === Enums.WEBAUTHN_ABORT_ERROR\n        ) {\n          return;\n        }\n        self.trigger('error', self, err.xhr);\n        self.trigger('setTransactionError', err);\n        if (rethrow || _.indexOf(KNOWN_ERRORS, err.name) === -1) {\n          throw err;\n        }\n      });\n  },\n\n  manageTransaction: function(fn) {\n    const self = this;\n    const res = fn.call(this, this.appState.get('transaction'), _.bind(this.setTransaction, this));\n\n    // If it's a promise, listen for failures\n    if (Q.isPromiseAlike(res)) {\n      return res.catch(function(err) {\n        if (\n          err.name === 'AuthPollStopError' ||\n          err.name === Enums.AUTH_STOP_POLL_INITIATION_ERROR ||\n          err.name === Enums.WEBAUTHN_ABORT_ERROR\n        ) {\n          return;\n        }\n        self.trigger('error', self, err.xhr);\n        self.trigger('setTransactionError', err);\n      });\n    }\n\n    return Q.resolve(res);\n  },\n\n  startTransaction: function(fn) {\n    const self = this;\n    const res = fn.call(this, this.settings.getAuthClient());\n\n    // If it's a promise, then chain to it\n    if (Q.isPromiseAlike(res)) {\n      return res\n        .then(function(trans) {\n          self.trigger('setTransaction', trans);\n          return trans;\n        })\n        .catch(function(err) {\n          self.trigger('error', self, err.xhr);\n          self.trigger('setTransactionError', err);\n          throw err;\n        });\n    }\n\n    return Q.resolve(res);\n  },\n\n  setTransaction: function(trans) {\n    this.appState.set('transaction', trans);\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Form, Controller } from '@okta/courage';\nimport Q from 'q';\n\nfunction getForm(controller) {\n  return _.find(controller.getChildren(), function(item) {\n    return item instanceof Form;\n  });\n}\n\nexport default Controller.extend({\n  // Ideally we should be attaching the listeners in the constructor, but because of the way\n  // we construct the FormController (this.model is generated after the BaseLoginController's\n  // constructor is called), this.model is undefined in when try to attach the events and\n  // therefore we don't listen to events for such forms. And changing the order in which we call\n  // the constructor doesn't help either (JS errors etc.). This at least guarantees that we\n  // are listening to the model events.\n  // Note - Figure out a way to call the constructor in the right order.\n  addListeners: function() {\n    // Events to enable/disable the primary button on the forms\n    this.listenTo(this.model, 'save', function() {\n      const form = getForm(this);\n      //disable the submit button on forms while making the request\n      //to prevent users from hitting rate limiting exceptions of\n      //1 per second on the auth api\n\n      const disableSubmitButton = form.disableSubmitButton;\n\n      if (disableSubmitButton && !form.disableSubmitButton()) {\n        return;\n      }\n      this.toggleButtonState(true);\n    });\n\n    this.listenTo(this.model, 'error', function() {\n      this.toggleButtonState(false);\n    });\n\n    this.addModelListeners(this.model);\n  },\n\n  addModelListeners: function(model) {\n    const setTransactionHandler = transaction => {\n      this.options.appState.set('transaction', transaction);\n    };\n\n    const transactionErrorHandler = err => {\n      this.options.appState.set('transactionError', err);\n    };\n\n    // Events to set the transaction attributes on the app state.\n    this.listenTo(model, 'setTransaction', setTransactionHandler);\n    this.listenTo(model, 'setTransactionError', transactionErrorHandler);\n\n    // For TOTP factor model\n    // TOTP model is special, its model will not be attached to a controller, but will\n    // tag along with the push factor model. We need to listen to the transaction\n    // changes on this as well (in case of the push+totp form).\n    const totpModel = model.get('backupFactor');\n\n    if (totpModel) {\n      this.listenTo(totpModel, 'setTransaction', setTransactionHandler);\n      this.listenTo(totpModel, 'setTransactionError', transactionErrorHandler);\n    }\n  },\n\n  // Override this method to delay switching to this screen until return\n  // promise is resolved. This is useful for cases like enrolling a security\n  // question, which requires an additional request to fetch the question\n  // list.\n  fetchInitialData: function() {\n    return Q();\n  },\n\n  // Override this method to prevent route navigation. This is useful for\n  // intermediate status changes that do not trigger a full refresh of the\n  // page, like MFA_ENROLL_ACTIVATE and MFA_CHALLENGE.\n  trapAuthResponse: function() {\n    return false;\n  },\n\n  toJSON: function() {\n    const data = Controller.prototype.toJSON.apply(this, arguments);\n\n    return _.extend(_.pick(this.options, 'appState'), data);\n  },\n\n  toggleButtonState: function(state) {\n    const button = this.$el.find('.button');\n\n    button.toggleClass('link-button-disabled', state).prop('disabled', state);\n  },\n\n  postRenderAnimation: function() {\n    // Event triggered after a page is rendered along with the classname to identify the page\n    // TODO: Deprecate this event in the next major version in favor of 'afterRender'\n    this.trigger('pageRendered', { page: this.className });\n\n    this.trigger('afterRender', { controller: this.className });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nconst INPUT = 'INPUT';\n\n// Syntactic sugar to provide some structure to SimpleForm inputs - Just\n// wraps options with { type: type, viewOptions: viewOptions, addOptions: addOptions }\n\nconst BUTTON = 'BUTTON';\nconst DIVIDER = 'DIVIDER';\nconst TOOLBAR = 'TOOLBAR';\nconst VIEW = 'VIEW';\n\nfunction wrap(type) {\n  return function(viewOptions, addOptions) {\n    return { type: type, viewOptions: viewOptions, addOptions: addOptions };\n  };\n}\n\nexport default {\n  Input: wrap(INPUT),\n  Button: wrap(BUTTON),\n  Divider: wrap(DIVIDER),\n  Toolbar: wrap(TOOLBAR),\n  View: wrap(VIEW),\n\n  INPUT: INPUT,\n  BUTTON: BUTTON,\n  DIVIDER: DIVIDER,\n  TOOLBAR: TOOLBAR,\n  VIEW: VIEW,\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, internal, Form, createButton } from '@okta/courage';\nimport BaseLoginModel from 'v1/models/BaseLoginModel';\nimport BaseLoginController from './BaseLoginController';\nimport FormType from './FormType';\nlet { Toolbar } = internal.views.forms.components;\nlet { FormUtil } = internal.views.forms.helpers;\nconst FormControllerSimpleForm = Form.extend({\n  layout: 'o-form-theme',\n  noCancelButton: true,\n  constructor: function(options) {\n    Form.call(this, options);\n    _.each(\n      _.result(this, 'formChildren') || [],\n      function(child) {\n        switch (child.type) {\n        case FormType.INPUT:\n          this.addInput(\n            _.extend(\n              {\n                label: false,\n                'label-top': true,\n              },\n              child.viewOptions\n            )\n          );\n          break;\n        case FormType.BUTTON:\n          this.add(createButton(_.extend({ model: this.model }, child.viewOptions)), child.addOptions);\n          FormUtil.applyShowWhen(this.last(), child.viewOptions && child.viewOptions.showWhen);\n          break;\n        case FormType.DIVIDER:\n          this.addDivider(child.viewOptions);\n          break;\n        case FormType.TOOLBAR:\n          this.add(Toolbar, { options: child.viewOptions });\n          FormUtil.applyShowWhen(this.last(), child.viewOptions && child.viewOptions.showWhen);\n          break;\n        case FormType.VIEW:\n          this.add(child.viewOptions.View, child.addOptions);\n          FormUtil.applyShowWhen(this.last(), child.viewOptions.showWhen);\n          break;\n        default:\n          throw new Error('Unrecognized child type: ' + child.type);\n        }\n      },\n      this\n    );\n  },\n});\nexport default BaseLoginController.extend({\n  constructor: function() {\n    const initialize = this.initialize;\n\n    this.initialize = function() {};\n\n    BaseLoginController.apply(this, arguments);\n\n    if (this.Model && this.Form) {\n      const Model = BaseLoginModel.extend(\n        _.extend(\n          {\n            parse: function(attributes) {\n              this.settings = attributes.settings;\n              this.appState = attributes.appState;\n              return _.omit(attributes, ['settings', 'appState']);\n            },\n          },\n          _.result(this, 'Model')\n        )\n      );\n\n      this.model = new Model(\n        {\n          settings: this.settings,\n          appState: this.options.appState,\n        },\n        { parse: true }\n      );\n      const Form = FormControllerSimpleForm.extend(_.result(this, 'Form', this));\n\n      this.form = new Form(this.toJSON());\n      this.add(this.form);\n    }\n\n    if (this.Footer) {\n      this.addFooter(this.Footer);\n    }\n\n    this.addListeners();\n    initialize.apply(this, arguments);\n  },\n\n  addFooter: function(Footer, args) {\n    this.footer = new Footer(_.extend(this.toJSON(), args || {}));\n    this.add(this.footer);\n  },\n\n  toJSON: function() {\n    const data = BaseLoginController.prototype.toJSON.apply(this, arguments);\n\n    return _.extend(_.pick(this.options, 'appState'), data);\n  },\n\n  back: function() {\n    if (this.footer && this.footer.back) {\n      this.footer.back();\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nexport default FormController.extend({\n  className: 'account-unlocked',\n  Model: function() {\n    return {\n      local: {\n        userFullName: ['string', false, this.options.appState.get('userFullName')],\n      },\n    };\n  },\n\n  Form: {\n    title: _.partial(loc, 'account.unlock.unlocked.title', 'login'),\n    subtitle: _.partial(loc, 'account.unlock.unlocked.desc', 'login'),\n    noButtonBar: true,\n    attributes: { 'data-se': 'account-unlocked' },\n    formChildren: function() {\n      return [\n        FormType.Button({\n          title: loc('goback', 'login'),\n          className: 'button button-primary button-wide',\n          attributes: { 'data-se': 'back-button' },\n          click: function() {\n            this.state.set('navigateDir', Enums.DIRECTION_BACK);\n            this.options.appState.trigger('navigate', '');\n          },\n        }),\n      ];\n    },\n  },\n});\n","import toMilliseconds from '@sindresorhus/to-milliseconds';\nimport parseMs from 'parse-ms';\n\nconst MOMENT_UNIT = {\n  MILLISECOND: 'milliseconds',\n  SECOND: 'seconds',\n  MINUTE: 'minutes',\n  HOUR: 'hours',\n  DAY: 'days',\n};\n\nconst MOMENT_UNIT_KEYS = Object.keys(MOMENT_UNIT);\n\n/**\n * @method convertMomentUnits\n * Conversion between moment's units and our units internally\n *\n * @param {String} momentUnit The units that val is in\n * @return {String} The key in the MOMENT_UNIT hash\n */\nconst convertMomentUnits = function(momentUnit) {\n  const entry = MOMENT_UNIT_KEYS.filter(k => MOMENT_UNIT[k] === momentUnit);\n\n  return entry.length === 1 ? entry[0] : momentUnit;\n};\n\nexport default {\n  /**\n   * @method getTimeInHighestRelevantUnit\n   * Will return a number in the units of the highest relevant time unit.\n   * Only checks milliseconds, seconds, minutes, hours, and days.\n   * E.g.\n   *   15 MINUTE  -> 15 MINUTE\n   *   15 minutes -> 15 MINUTE\n   *   60 minutes ->  1 HOUR\n   *   90 minutes -> 90 MINUTE\n   *   24 HOUR    ->  1 DAY\n   *   24 hours   ->  1 DAY\n   *   30 DAY     -> 30 DAY\n   *\n   * @typedef { \"MILLISECOND\" | \"SECOND\" | \"MINUTE\" | \"HOUR\" | \"DAY\" } TimeUnit\n   *\n   * @typedef { \"MILLISECOND\" | \"SECOND\" | \"MINUTE\" | \"HOUR\" | \"DAY\" |\n   *            \"milliseconds\" | \"seconds\" | \"minutes\" | \"hours\" | \"days\"\n   *          } FlexibleTimeUnit\n   *\n   * @typedef TimeAndUnit\n   * @property {number} time the consolidated time\n   * @property {TimeUnit} unit the unit of the time\n   *\n   * @param {FlexibleTimeUnit} unit The time unit\n   * @return {TimeAndUnit} An object containing the amount of time and the unit\n   */\n  getTimeInHighestRelevantUnit: function(val, unit) {\n    const defaultTimeObj = {\n      days: 0,\n      hours: 0,\n      minutes: 0,\n      seconds: 0,\n      milliseconds: 0,\n    };\n    const normalizedUnit = MOMENT_UNIT[unit] || unit;\n    let timeObj;\n\n    try {\n      const ms = toMilliseconds(Object.assign(defaultTimeObj, { [normalizedUnit]: val }));\n      timeObj = parseMs(ms);\n    } catch (error) {\n      timeObj = {};\n    }\n\n    const duration = Object.keys(timeObj).reduce((init, k) => {\n      if (timeObj[k] !== 0) {\n        init[k] = timeObj[k];\n      }\n      return init;\n    }, {});\n\n    let highestUnit;\n    let time;\n    if (Object.keys(duration).length === 1) {\n      Object.keys(duration).forEach(k => {\n        time = duration[k];\n        highestUnit = k;\n      });\n    } else {\n      time = val;\n      highestUnit = normalizedUnit;\n    }\n\n    return {\n      time: time,\n      unit: convertMomentUnits(highestUnit),\n    };\n  },\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 38], max-statements: [2, 38] */\nimport { _, loc } from '@okta/courage';\nimport TimeUtil from 'util/TimeUtil';\nconst fn = {};\nconst factorData = {\n  OKTA_VERIFY: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.totpSoft.oktaVerify',\n    description: 'factor.totpSoft.description',\n    iconClassName: 'mfa-okta-verify',\n    sortOrder: 1,\n  },\n  OKTA_VERIFY_PUSH: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.oktaVerifyPush',\n    description: 'factor.push.description',\n    iconClassName: 'mfa-okta-verify',\n    sortOrder: 1,\n  },\n  U2F: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.u2f',\n    description: brandName => {\n      return brandName ? 'factor.u2f.description.specific' : 'factor.u2f.description.generic';\n    },\n    iconClassName: 'mfa-u2f',\n    sortOrder: 2,\n  },\n  WEBAUTHN: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.webauthn.biometric',\n    description: 'factor.webauthn.biometric.description',\n    iconClassName: 'mfa-webauthn',\n    sortOrder: 2,\n  },\n  WINDOWS_HELLO: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.windowsHello',\n    description: brandName => {\n      return brandName\n        ? 'factor.windowsHello.signin.description.specific'\n        : 'factor.windowsHello.signin.description.generic';\n    },\n    iconClassName: 'mfa-windows-hello',\n    sortOrder: 3,\n  },\n  YUBIKEY: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.totpHard.yubikey',\n    description: 'factor.totpHard.yubikey.description',\n    iconClassName: 'mfa-yubikey',\n    sortOrder: 4,\n  },\n  GOOGLE_AUTH: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.totpSoft.googleAuthenticator',\n    description: 'factor.totpSoft.description',\n    iconClassName: 'mfa-google-auth',\n    sortOrder: 5,\n  },\n  CUSTOM_HOTP: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: '',\n    description: 'factor.hotp.description',\n    iconClassName: 'mfa-hotp',\n    sortOrder: 6,\n  },\n  SMS: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.sms',\n    description: 'factor.sms.description',\n    iconClassName: 'mfa-okta-sms',\n    sortOrder: 7,\n  },\n  CALL: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.call',\n    description: 'factor.call.description',\n    iconClassName: 'mfa-okta-call',\n    sortOrder: 8,\n  },\n  EMAIL: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.email',\n    description: 'factor.email.description',\n    iconClassName: 'mfa-okta-email',\n    sortOrder: 9,\n  },\n  QUESTION: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.securityQuestion',\n    description: 'factor.securityQuestion.description',\n    iconClassName: 'mfa-okta-security-question',\n    sortOrder: 10,\n  },\n  DUO: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.duo',\n    description: 'factor.duo.description',\n    iconClassName: 'mfa-duo',\n    sortOrder: 11,\n  },\n  SYMANTEC_VIP: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.totpHard.symantecVip',\n    description: 'factor.totpHard.description',\n    iconClassName: 'mfa-symantec',\n    sortOrder: 12,\n  },\n  RSA_SECURID: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.totpHard.rsaSecurId',\n    description: 'factor.totpHard.description',\n    iconClassName: 'mfa-rsa',\n    sortOrder: 13,\n  },\n  ON_PREM: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: '',\n    description: 'factor.totpHard.description',\n    iconClassName: 'mfa-onprem',\n    sortOrder: 14,\n  },\n  PASSWORD: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: 'factor.password',\n    description: '',\n    iconClassName: 'mfa-okta-password',\n    sortOrder: 15,\n  },\n  CUSTOM_CLAIMS: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: '',\n    description: 'factor.customFactor.description',\n    iconClassName: 'mfa-custom-factor',\n    sortOrder: 16,\n  },\n  GENERIC_SAML: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: '',\n    description: brandName => {\n      return brandName ? 'factor.customFactor.description.specific' : 'factor.customFactor.description.generic';\n    },\n    iconClassName: 'mfa-custom-factor',\n    sortOrder: 17,\n  },\n  GENERIC_OIDC: {\n    /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n    label: '',\n    description: brandName => {\n      return brandName ? 'factor.customFactor.description.specific' : 'factor.customFactor.description.generic';\n    },\n    iconClassName: 'mfa-custom-factor',\n    sortOrder: 18,\n  },\n};\n\nconst getPasswordComplexityRequirementsAsArray = function(policy, i18nKeys) {\n  const setExcludeAttributes = function(policyComplexity) {\n    const excludeAttributes = policyComplexity.excludeAttributes;\n\n    policyComplexity.excludeFirstName = _.contains(excludeAttributes, 'firstName');\n    policyComplexity.excludeLastName = _.contains(excludeAttributes, 'lastName');\n    return _.omit(policyComplexity, 'excludeAttributes');\n  };\n\n  if (policy.complexity) {\n    const complexityFields = i18nKeys.complexity;\n    const policyComplexity = setExcludeAttributes(policy.complexity);\n\n    const requirements = _.map(policyComplexity, function(complexityValue, complexityType) {\n      if (complexityValue <= 0) {\n        // to skip 0 and -1\n        return;\n      }\n\n      const params = complexityFields[complexityType];\n\n      return params.args ? loc(params.i18n, 'login', [complexityValue]) : loc(params.i18n, 'login');\n    });\n\n    return _.compact(requirements);\n  }\n  return [];\n};\n\nconst getPasswordHistoryRequirementDescription = function(policy, i18nKeys, isUpdatedPasswordRequirementsText) {\n  if (policy.age && policy.age.historyCount > 0) {\n    if (isUpdatedPasswordRequirementsText) {\n      return policy.age.historyCount === 1 ?\n        loc(i18nKeys.history.one.i18n, 'login')\n        : loc(i18nKeys.history.many.i18n, 'login', [policy.age.historyCount]);\n    } else {\n      return loc(i18nKeys.history.i18n, 'login', [policy.age.historyCount]);\n    }\n  }\n  return null;\n};\n\nconst getPasswordAgeRequirementDescription = function(policy, i18nKeys) {\n  const getPasswordAgeRequirement = function(displayableTime) {\n    let propertiesString;\n\n    switch (displayableTime.unit) {\n    case 'DAY':\n      propertiesString = i18nKeys.age.days.i18n;\n      break;\n    case 'HOUR':\n      propertiesString = i18nKeys.age.hours.i18n;\n      break;\n    case 'MINUTE':\n      propertiesString = i18nKeys.age.minutes.i18n;\n    }\n    return loc(propertiesString, 'login', [displayableTime.time]);\n  };\n\n  if (policy.age && policy.age.minAgeMinutes > 0) {\n    const displayableTime = TimeUtil.getTimeInHighestRelevantUnit(policy.age.minAgeMinutes, 'MINUTE');\n\n    return getPasswordAgeRequirement(displayableTime);\n  }\n  return null;\n};\n\nconst getPasswordRequirements = function(policy, i18nKeys, isUpdatedPasswordRequirementsText) {\n  const passwordRequirements = {\n    complexity: [],\n    history: [],\n    age: [],\n  };\n\n  passwordRequirements.complexity = getPasswordComplexityRequirementsAsArray(policy, i18nKeys);\n\n  const historyRequirement =\n    getPasswordHistoryRequirementDescription(policy, i18nKeys, isUpdatedPasswordRequirementsText);\n\n  if (historyRequirement) {\n    passwordRequirements.history.push(historyRequirement);\n  }\n\n  const ageRequirement = getPasswordAgeRequirementDescription(policy, i18nKeys);\n\n  if (ageRequirement) {\n    passwordRequirements.age.push(ageRequirement);\n  }\n\n  return passwordRequirements;\n};\n\nfn.getFactorName = function(provider, factorType) {\n  if (provider === 'OKTA' && factorType === 'token:software:totp') {\n    return 'OKTA_VERIFY';\n  }\n  if (provider === 'OKTA' && factorType === 'push') {\n    return 'OKTA_VERIFY_PUSH';\n  }\n  if (provider === 'GOOGLE') {\n    return 'GOOGLE_AUTH';\n  }\n  if (provider === 'SYMANTEC' && factorType === 'token') {\n    return 'SYMANTEC_VIP';\n  }\n  if (provider === 'RSA' && factorType === 'token') {\n    return 'RSA_SECURID';\n  }\n  if (provider === 'DEL_OATH' && factorType === 'token') {\n    return 'ON_PREM';\n  }\n  if (provider === 'DUO' && factorType === 'web') {\n    return 'DUO';\n  }\n  if (provider === 'YUBICO' && factorType === 'token:hardware') {\n    return 'YUBIKEY';\n  }\n  if (provider === 'OKTA' && factorType === 'sms') {\n    return 'SMS';\n  }\n  if (provider === 'OKTA' && factorType === 'call') {\n    return 'CALL';\n  }\n  if (provider === 'OKTA' && factorType === 'question') {\n    return 'QUESTION';\n  }\n  if (provider === 'OKTA' && factorType === 'email') {\n    return 'EMAIL';\n  }\n  if (provider === 'OKTA' && factorType === 'password') {\n    return 'PASSWORD';\n  }\n  if (provider === 'GENERIC_SAML' && factorType === 'assertion:saml2') {\n    return 'GENERIC_SAML';\n  }\n  if (provider === 'GENERIC_OIDC' && factorType === 'assertion:oidc') {\n    return 'GENERIC_OIDC';\n  }\n  return fn.getFactorNameForFactorType.call(this, factorType);\n};\n\nfn.getFactorNameForFactorType = function(factorType) {\n  if (factorType === 'u2f') {\n    return 'U2F';\n  }\n  if (factorType === 'token:software:totp') {\n    return 'OKTA_VERIFY';\n  }\n  if (factorType === 'webauthn') {\n    if (this.settings.get('features.webauthn')) {\n      return 'WEBAUTHN';\n    } else {\n      return 'WINDOWS_HELLO';\n    }\n  }\n  if (factorType === 'token:hotp') {\n    return 'CUSTOM_HOTP';\n  }\n  if (factorType === 'claims_provider') {\n    return 'CUSTOM_CLAIMS';\n  }\n};\n\nfn.isOktaVerify = function(provider, factorType) {\n  return provider === 'OKTA' && (factorType === 'token:software:totp' || factorType === 'push');\n};\n\nfn.getFactorLabel = function(provider, factorType) {\n  const key = factorData[fn.getFactorName.apply(this, [provider, factorType])].label;\n\n  return loc(key, 'login');\n};\n\nfn.getFactorDescription = function(provider, factorType) {\n  const descriptionKey = factorData[fn.getFactorName.apply(this, [provider, factorType])].description;\n\n  if (_.isFunction(descriptionKey)) {\n    const brandName = this.settings.get('brandName');\n    const key = descriptionKey(brandName);\n\n    return brandName ? loc(key, 'login', [brandName]) : loc(key, 'login');\n  } else {\n    return loc(descriptionKey, 'login');\n  }\n};\n\nfn.getFactorIconClassName = function(provider, factorType) {\n  return factorData[fn.getFactorName.apply(this, [provider, factorType])].iconClassName;\n};\n\nfn.getFactorSortOrder = function(provider, factorType) {\n  return factorData[fn.getFactorName.apply(this, [provider, factorType])].sortOrder;\n};\n\nfn.getRememberDeviceValue = function(appState) {\n  return appState && appState.get('rememberDeviceByDefault');\n};\n\nfn.getSecurityQuestionLabel = function(questionObj) {\n  const localizedQuestion = loc('security.' + questionObj.question);\n\n  return localizedQuestion.indexOf('L10N_ERROR') < 0 ? localizedQuestion : questionObj.questionText;\n};\n\nfn.removeRequirementsFromError = function(responseJSON, policy) {\n  const passwordRequirementsAsString = this.getPasswordComplexityDescription(policy);\n\n  if (\n    responseJSON.errorCauses &&\n    responseJSON.errorCauses.length > 0 &&\n    _.isString(responseJSON.errorCauses[0].errorSummary)\n  ) {\n    responseJSON.errorCauses[0].errorSummary = responseJSON.errorCauses[0].errorSummary\n      .replace(passwordRequirementsAsString, '')\n      .trim();\n  }\n  return responseJSON;\n};\n\nfn.getPasswordComplexityDescriptionForHtmlList = function(policy) {\n  const passwordRequirementHtmlI18nKeys = {\n    complexity: {\n      minLength: { i18n: 'password.complexity.length.description', args: true },\n      minLowerCase: { i18n: 'password.complexity.lowercase.description' },\n      minUpperCase: { i18n: 'password.complexity.uppercase.description' },\n      minNumber: { i18n: 'password.complexity.number.description' },\n      minSymbol: { i18n: 'password.complexity.symbol.description' },\n      excludeUsername: { i18n: 'password.complexity.no_username.description' },\n      excludeFirstName: { i18n: 'password.complexity.no_first_name.description' },\n      excludeLastName: { i18n: 'password.complexity.no_last_name.description' },\n    },\n    history: {\n      one: { i18n: 'password.complexity.history.one.description' },\n      many: { i18n: 'password.complexity.history.description' }\n    },\n    age: {\n      minutes: { i18n: 'password.complexity.minAgeMinutes.description' },\n      hours: { i18n: 'password.complexity.minAgeHours.description' },\n      days: { i18n: 'password.complexity.minAgeDays.description' },\n    },\n  };\n  const passwordRequirements = getPasswordRequirements(policy, passwordRequirementHtmlI18nKeys, true);\n\n  return _.union(passwordRequirements.complexity, passwordRequirements.history, passwordRequirements.age);\n};\n\nfn.getPasswordComplexityDescription = function(policy) {\n  const passwordRequirementI18nKeys = {\n    complexity: {\n      minLength: { i18n: 'password.complexity.length', args: true },\n      minLowerCase: { i18n: 'password.complexity.lowercase' },\n      minUpperCase: { i18n: 'password.complexity.uppercase' },\n      minNumber: { i18n: 'password.complexity.number' },\n      minSymbol: { i18n: 'password.complexity.symbol' },\n      excludeUsername: { i18n: 'password.complexity.no_username' },\n      excludeFirstName: { i18n: 'password.complexity.no_first_name' },\n      excludeLastName: { i18n: 'password.complexity.no_last_name' },\n    },\n    history: { i18n: 'password.complexity.history' },\n    age: {\n      minutes: { i18n: 'password.complexity.minAgeMinutes' },\n      hours: { i18n: 'password.complexity.minAgeHours' },\n      days: { i18n: 'password.complexity.minAgeDays' },\n    },\n  };\n  const result = [];\n  const passwordRequirements = getPasswordRequirements(policy, passwordRequirementI18nKeys, false);\n  let requirements = passwordRequirements.complexity;\n\n  // Generate and add complexity string to result\n  if (requirements.length > 0) {\n    requirements = _.reduce(requirements, function(result, requirement) {\n      return result ? result + loc('password.complexity.list.element', 'login', [requirement]) : requirement;\n    });\n\n    result.push(loc('password.complexity.requirements', 'login', [requirements]));\n  }\n\n  // Only 1 value expected in history and age for now\n  result.push(passwordRequirements.history[0]);\n  result.push(passwordRequirements.age[0]);\n\n  return _.compact(result).join(' ');\n};\n\nfn.getCardinalityText = function(enrolled, required, cardinality) {\n  if (cardinality) {\n    if (enrolled) {\n      return cardinality.enrolled === 1 ? '' : loc('enroll.choices.cardinality.setup', 'login', [cardinality.enrolled]);\n    } else if (required && cardinality.maximum > 1) {\n      return loc('enroll.choices.cardinality.setup.remaining', 'login', [cardinality.enrolled, cardinality.minimum]);\n    }\n  }\n  return '';\n};\n\nfn.findFactorInFactorsArray = function(factors, provider, factorType) {\n  let factor = factors.findWhere({ provider: provider, factorType: factorType });\n\n  if (factor === undefined) {\n    //for factors that support cardinality and only have factorType\n    factor = factors.findWhere({ factorType: factorType });\n  }\n  return factor;\n};\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n//note: not including Okta here and explicitly including jquery and Handlebars\n//because we want to be explicit about which TextBox we are extending here\n//and want to avoid the cirucular dependency that occurs if we\n//include Okta\nimport { internal } from '@okta/courage';\nimport '@okta/qtip';\nimport BrowserFeatures from 'util/BrowserFeatures';\nconst { TextBox } = internal.views.forms.inputs;\nexport default TextBox.extend({\n  postRender: function() {\n    if (this.options.type === 'number') {\n      const input = this.$('input');\n\n      input.attr({\n        pattern: '[0-9]*',\n        inputmode: 'numeric',\n      });\n    }\n    TextBox.prototype.postRender.apply(this, arguments);\n  },\n  // Override the focus() to ignore focus in IE. IE (8-11) has a known bug where\n  // the placeholder text disappears when the input field is focused.\n  focus: function() {\n    if (BrowserFeatures.isIE()) {\n      return;\n    }\n    return TextBox.prototype.focus.apply(this, arguments);\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport TextBox from 'v1/views/shared/TextBox';\nconst form = {\n  title: function() {\n    const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n\n    return loc('enroll.totp.title', 'login', [factorName]);\n  },\n  subtitle: _.partial(loc, 'enroll.totp.enterCode', 'login'),\n  autoSave: true,\n  noButtonBar: true,\n  attributes: { 'data-se': 'step-sendcode' },\n\n  formChildren: function() {\n    return [\n      FormType.Input({\n        label: loc('mfa.challenge.enterCode.placeholder', 'login'),\n        'label-top': true,\n        explain: Util.createInputExplain(\n          'mfa.challenge.enterCode.tooltip',\n          'mfa.challenge.enterCode.placeholder',\n          'login'\n        ),\n        'explain-top': true,\n        name: 'passCode',\n        input: TextBox,\n        type: 'tel',\n      }),\n      FormType.Toolbar({\n        noCancelButton: true,\n        save: loc('oform.verify', 'login'), // TODO: deprecated by mfa.challenge.verify\n      }),\n    ];\n  },\n};\nexport default form;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nexport default View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help js-back\" data-se=\"back-link\">\\\n        {{i18n code=\"mfa.backToFactors\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .js-back': function(e) {\n      e.preventDefault();\n      this.options.appState.trigger('backToFactors');\n      this.back();\n    },\n  },\n\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    if (this.options.appState.get('prevLink')) {\n      // Once we are in the MFA_ENROLL_ACTIVATE, we need to reset to the\n      // correct state. Fortunately, this means that the router will\n      // handle navigation once the request is finished.\n      this.model.doTransaction(function(transaction) {\n        return transaction.prev();\n      });\n    } else {\n      this.options.appState.trigger('navigate', 'signin/enroll');\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport FormController from 'v1/util/FormController';\nimport EnterPasscodeForm from 'v1/views/enroll-factors/EnterPasscodeForm';\nimport Footer from 'v1/views/enroll-factors/Footer';\nexport default FormController.extend({\n  className: 'activate-totp',\n  Model: function() {\n    return {\n      props: {\n        factorId: ['string', true, this.options.appState.get('activatedFactorId')],\n        passCode: ['string', true],\n      },\n      local: {\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n      save: function() {\n        return this.doTransaction(function(transaction) {\n          return transaction.activate({\n            passCode: this.get('passCode'),\n          });\n        });\n      },\n    };\n  },\n\n  Form: EnterPasscodeForm,\n\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View, _ } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport '@okta/qtip';\n\nexport default View.extend({\n  className: 'scope-item',\n  template: hbs`\n    <p class=\"scope-item-text no-translate\">{{name}}</p>\n    {{#if description}}\n    <span class=\"scope-item-tooltip icon form-help-16\" />\n    {{/if}}`,\n\n  postRender: function() {\n    this.$('.scope-item-tooltip').qtip({\n      content: {\n        text: _.escape(this.options.description)\n      },\n      style: { classes: 'okta-tooltip qtip-custom qtip-shadow' },\n      position: {\n        my: 'bottom left',\n        target: 'mouse'\n      }\n    });\n  }\n});\n\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n/* eslint max-len: [2, 131] */\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { _, View, loc } from '@okta/courage';\nimport ScopeItem from './ScopeItem';\n\nconst SCOPE_N_GROUP_CONFIG = {\n  groups: 'user',\n  myAccount: 'user',\n  users: 'user',\n  apps: 'resource',\n  authenticators: 'resource',\n  authorizationServers: 'resource',\n  clients: 'resource',\n  domains: 'resource',\n  factors: 'resource',\n  idps: 'resource',\n  linkedObjects: 'resource',\n  policies: 'resource',\n  templates: 'resource',\n  eventHooks: 'hook',\n  inlineHooks: 'hook',\n  events: 'system',\n  logs: 'system',\n  orgs: 'system',\n  roles: 'system',\n  schemas: 'system',\n  sessions: 'system',\n  trustedOrigins: 'system',\n};\n\nconst DEFAULT_GROUP = 'system';\n\nconst findScopeGroupKey = ({ name = '' }) => {\n  const xs = name.split('.');\n  const groupType = xs[1];\n\n  return SCOPE_N_GROUP_CONFIG[groupType] || DEFAULT_GROUP;\n};\n\nconst ScopeGroupHeaderView = View.extend({\n  className: 'scope-group',\n\n  events: {\n    'click': 'expandScopes',\n  },\n\n  template: hbs`\n    <div class=\"scope-group--header\">\n    <h3>{{groupName}}</h3>\n    <span class=\"scope-group--toggle\">\n      <svg class=\"caret\"\n           width=\"12\" height=\"12\"\n           viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path class=\"path\" fill-rule=\"evenodd\"\n              clip-rule=\"evenodd\"\n              d=\"M5.99967 4.66663L10.2663 8.66663L11.333 7.66663L5.99967 2.66663L0.666342 7.73636L1.73301 8.66663L5.99967 4.66663Z\"\n              fill=\"#A0A7AC\">\n        </path>\n      </svg>\n    </span>\n    </div>`,\n\n  expandScopes() {\n    this.$el.toggleClass('scope-group--is-expanded');\n    this.$('.caret').toggleClass('caret--is-rotated');\n  },\n\n  preRender() {\n    _.chain(this.options.scopes)\n      .sortBy(({ name }) => name)\n      .each(({ name, displayName, description }) => {\n        this.add(ScopeItem, {\n          options: {\n            name: displayName || name,\n            description,\n          },\n        });\n      });\n  }\n});\n\nexport default View.extend({\n  className: 'scope-list detail-row',\n\n  postRender: function() {\n    const allScopes = this.model.get('scopes');\n    const scopesWithGroup = _.groupBy(allScopes, findScopeGroupKey);\n\n    const SCOPE_GROUP_NAMES_CONFIG = {\n      'user': loc('admin.consent.group.user.group', 'login'),\n      'resource': loc('admin.consent.group.resource.policy', 'login'),\n      'hook': loc('admin.consent.group.hook', 'login'),\n      'system': loc('admin.consent.group.system', 'login'),\n    };\n\n    // loop through SCOPE_GROUP_NAMES_CONFIG to keep group order consistent in UI.\n    _.each(SCOPE_GROUP_NAMES_CONFIG, (groupName, groupKey) => {\n      const scopes = scopesWithGroup[groupKey];\n      if (!Array.isArray(scopes)) {\n        return;\n      }\n      // add scope group header and scopes\n      this.add(ScopeGroupHeaderView, {\n        options: {\n          groupName,\n          scopes,\n        }\n      });\n    });\n  },\n});\n","import hbs from '@okta/handlebars-inline-precompile';\n\nconst consentLogoHeaderTemplate = hbs`{{#if clientURI}}\n <a href=\"{{clientURI}}\" class=\"client-logo-link\" target=\"_blank\">\n{{/if}}\n{{#if customLogo}}\n  <img\n    class=\"client-logo custom-logo\"\n    src=\"{{customLogo}}\"\n    alt=\"{{i18n code=\"common.logo.alt\" bundle=\"login\"}}\"\n    aria-hidden=\"true\" />\n{{else}}\n  <img\n  class=\"client-logo default-logo\"\n  src=\"{{defaultLogo}}\"\n  alt=\"{{i18n code=\"common.logo.alt\" bundle=\"login\"}}\"\n  aria-hidden=\"true\" />\n{{/if}}\n{{#if clientURI}}\n  </a>\n{{/if}}\n<h1>\n  <span class=\"title-text\">{{{i18n code=\"consent.required.text\" bundle=\"login\" arguments=\"appName\"}}}</span>\n  {{#if issuer}}\n    <div class=\"issuer\"><span>{{issuer}}</span></div>\n  {{/if}}\n</h1>`;\n\nexport default consentLogoHeaderTemplate;\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View, loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport ScopeList from 'v1/views/admin-consent/ScopeList';\nimport consentLogoHeaderTemplate from 'v1/views/shared/templates/consentLogoHeaderTemplate';\n\nconst ConsentModel = {\n  props: {\n    scopes: ['array', true]\n  },\n  save: function() {\n    return this.doTransaction(function(transaction) {\n      return transaction.consent({\n        consent: {\n          scopes: _.pluck(this.get('scopes'), 'name')\n        }\n      });\n    });\n  },\n  cancel: function() {\n    var self = this;\n    return this.doTransaction(function(transaction) {\n      return transaction.cancel();\n    }).then(function() {\n      var consentCancelFn = self.settings.get('consent.cancel');\n      if (_.isFunction(consentCancelFn)) {\n        consentCancelFn();\n      }\n    });\n  }\n};\n\nconst ConsentHeader = View.extend({\n  className: 'consent-title detail-row',\n  template: consentLogoHeaderTemplate,\n  getTemplateData: function() {\n    var appState = this.options.appState;\n    return {\n      appName: appState.escape('targetLabel'),\n      customLogo: appState.get('targetLogo') && appState.get('targetLogo').href,\n      defaultLogo: appState.get('defaultAppLogo'),\n      clientURI: appState.get('targetClientURI') && appState.get('targetClientURI').href,\n      issuer: appState.get('issuer'),\n    };\n  }\n});\n\nconst ConsentForm = {\n  noCancelButton: false,\n  buttonOrder: ['cancel', 'save'],\n  autoSave: true,\n  save: _.partial(loc, 'consent.required.consentButton', 'login'),\n  cancel: _.partial(loc, 'consent.required.cancelButton', 'login'),\n  formChildren: [\n    FormType.View({\n      View: ConsentHeader\n    }),\n    FormType.View({\n      View: ScopeList,\n    }),\n  ],\n};\n\nconst AdminConsentRequiredController = FormController.extend({\n  Model: ConsentModel,\n\n  Form: ConsentForm,\n\n  className: 'admin-consent-required',\n\n  initialize: function() {\n    this.model.set('scopes', this.options.appState.get('scopes'));\n    this.listenTo(this.form, 'cancel', () => {\n      this.model.cancel();\n    });\n  },\n});\n\nexport default AdminConsentRequiredController;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc } from '@okta/courage';\nimport Enums from './Enums';\nimport { ErrorXHR, ErrorContextData } from '../types/errors';\nimport { FlowIdentifier } from '@okta/okta-auth-js';\n\nabstract class CustomError extends Error {\n  constructor(message?: string) {\n    super(message);\n\n    // 'Error' breaks prototype chain. Need to restore it for ES5.\n    // https://github.com/microsoft/TypeScript/wiki/FAQ#why-doesnt-extending-built-ins-like-error-array-and-map-work\n    // Note: no need to adjust prototype in subclasses of 'CustomError'.\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\nexport class ConfigError extends CustomError {\n  name = Enums.CONFIG_ERROR;\n  constructor(message?: string) {\n    super(message || loc('error.config'));\n  }\n}\n\nexport class UnsupportedBrowserError extends CustomError {\n  name = Enums.UNSUPPORTED_BROWSER_ERROR;\n  constructor(message?: string) {\n    super(message || loc('error.unsupported.browser'));\n  }\n}\n\nexport class OAuthError extends CustomError {\n  name = Enums.OAUTH_ERROR;\n}\n\nexport class RegistrationError extends CustomError {\n  name = Enums.REGISTRATION_FAILED;\n}\n\n// Thrown when initiation of poll was cancelled.\nexport class AuthStopPollInitiationError extends CustomError {\n  name = Enums.AUTH_STOP_POLL_INITIATION_ERROR;\n}\n\nexport class U2FError extends CustomError {\n  xhr: ErrorXHR;\n  name = Enums.U2F_ERROR;\n  constructor(err: ErrorContextData) {\n    super(err.xhr?.responseJSON?.errorSummary);\n    this.xhr = err.xhr;\n  }\n}\n\nexport class WebAuthnError extends CustomError {\n  xhr: ErrorXHR;\n  name = Enums.WEB_AUTHN_ERROR;\n  constructor(err: ErrorContextData) {\n    super(err.xhr?.responseJSON?.errorSummary);\n    this.xhr = err.xhr;\n  }\n}\n\n// This is triggered only when code aborts webauthn browser prompt.\nexport class WebauthnAbortError extends CustomError {\n  name = Enums.WEBAUTHN_ABORT_ERROR;\n}\n\nexport class ConfiguredFlowError extends CustomError {\n  flowSetting: FlowIdentifier;\n  name = Enums.CONFIGURED_FLOW_ERROR;\n  constructor(message: string, flowSetting: FlowIdentifier) {\n    super(message);\n    this.flowSetting = flowSetting;\n  }\n}\n","import { loc } from '@okta/courage';\n\nimport { AuthSdkError, OAuthError as SdkOAuthError} from '@okta/okta-auth-js';\nimport { OAuthError } from './Errors';\nimport { ErrorDetails } from '../types/errors';\n\ntype ErrorTraits = 'inline' | 'terminal';\n\ntype ErrorType = {\n  [key in ErrorTraits]?: boolean;\n};\n\nclass InlineErrorType implements ErrorType {\n  inline = true;\n}\n\nclass TerminalErrorType implements ErrorType {\n  terminal = true;\n}\n\nclass TypedOAuthError<T extends ErrorType> extends OAuthError {\n  errorType: T;\n  orginalError: AuthSdkError | SdkOAuthError;\n  errorDetails: ErrorDetails\n\n  constructor(originalError: AuthSdkError | SdkOAuthError, errorTypeCtor: new () => T) {\n    super(originalError.message);\n    this.errorType = new errorTypeCtor();\n    this.orginalError = originalError;\n\n    this.errorDetails = {\n      errorSummary: this.getErrorSummary(),\n      errorCode: originalError.errorCode,\n      errorCauses: 'errorCauses' in originalError ? originalError.errorCauses : undefined,\n    }\n  }\n\n  protected getErrorSummary() {\n    return this.orginalError.errorSummary;\n  }\n\n  public is(errorTrait: ErrorTraits) {\n    return Boolean(Object.getOwnPropertyDescriptor(this.errorType, errorTrait as PropertyKey)?.value);\n  }\n}\n\nclass RecoverableError<T extends ErrorType> extends TypedOAuthError<T> {\n\n}\n\nclass NonRecoverableError<T extends ErrorType> extends TypedOAuthError<T> {\n\n}\n\nclass ClockDriftError extends RecoverableError<TerminalErrorType> {\n  constructor(error: AuthSdkError | SdkOAuthError) {\n    super(error, TerminalErrorType);\n  }\n\n  getErrorSummary(): string {\n    return loc('error.unsynced.clock', 'login');\n  }\n}\n\nclass UserNotAssignedError extends RecoverableError<InlineErrorType> {\n  constructor(error: AuthSdkError | SdkOAuthError) {\n    super(error, InlineErrorType);\n  }\n}\n\nclass JITProfileProvisioningError extends RecoverableError<InlineErrorType> {\n  constructor(error: AuthSdkError | SdkOAuthError) {\n    super(error, InlineErrorType);\n  }\n  getErrorSummary(): string {\n    return loc('error.jit_failure', 'login');\n  }\n}\n\nclass MfaRequiredError extends NonRecoverableError<InlineErrorType> {\n  constructor(error: AuthSdkError | SdkOAuthError) {\n    super(error, InlineErrorType);\n  }\n\n  getErrorSummary(): string {\n    return loc('error.mfa.required', 'login');\n  }\n}\n\nfunction getTypedOAuthError(error: AuthSdkError | SdkOAuthError) {\n  switch(error.errorCode) {\n    case 'access_denied':\n      return new UserNotAssignedError(error);\n\n    case 'jit_failure_missing_fields':\n    case 'jit_failure_invalid_login_format':\n    case 'jit_failure_values_not_match_pattern':\n    case 'jit_failure_values_too_long':\n    case 'jit_failure_invalid_locale':\n      return new JITProfileProvisioningError(error);\n\n    case 'login_required':\n      const mfaRequiredMsg = 'The client specified not to prompt, but the client app requires re-authentication or MFA.';\n      if (error.message === mfaRequiredMsg) {\n        return new MfaRequiredError(error);\n      }\n\n    case 'INTERNAL':\n      const clockDriftMsg = 'The JWT was issued in the future';\n      if (error.message === clockDriftMsg) {\n        return new ClockDriftError(error);\n      }\n\n    default:\n      return new RecoverableError(error, Object);\n  }\n}\n\nexport {\n  RecoverableError,\n  NonRecoverableError,\n  JITProfileProvisioningError,\n  ClockDriftError,\n  UserNotAssignedError,\n  MfaRequiredError,\n  TypedOAuthError,\n  getTypedOAuthError\n}\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport Enums from './Enums';\nimport { getTypedOAuthError, NonRecoverableError } from './OAuthErrors';\nimport Util from './Util';\nconst util = {};\n\n// https://github.com/okta/okta-auth-js#authorize-options\nconst AUTH_PARAMS = [\n  'responseType',\n  'scopes',\n  'state',\n  'nonce',\n  'idp',\n  'idpScope',\n  'display',\n  'prompt',\n  'maxAge',\n  'loginHint'\n];\nutil.AUTH_PARAMS = AUTH_PARAMS;\n\n/**\n * Get the tokens in the OIDC/OAUTH flows\n *\n * @param settings - settings model object\n * @param params - {idp: 'xxx'} for social auth\n *                 {sessionToken: 'xxx'} for okta idp\n */\nutil.getTokens = function(settings, params, controller) {\n  function success(result) {\n    settings.callGlobalSuccess(Enums.SUCCESS, result);\n  }\n\n  function error(error) {\n    const typedError = getTypedOAuthError(error);\n    if (typedError.is('terminal')) {\n      controller.model.appState.set('flashError', typedError);\n      controller.model.appState.trigger('navigate', 'signin/error');\n    } else if (typedError.is('inline')) {\n      controller.model.trigger('error', controller.model, {\n        responseJSON: {\n          errorSummary: typedError.errorDetails.errorSummary\n        }\n      });\n      controller.model.appState.trigger('removeLoading');\n    }\n\n    if (!typedError.is('terminal')) {\n      Util.triggerAfterError(controller, typedError, settings);\n    }\n\n    if (typedError instanceof NonRecoverableError) {\n      settings.callGlobalError(typedError);\n    }\n  }\n\n  const authClient = settings.getAuthClient();\n  const isAuthorizationCodeFlow = authClient.isAuthorizationCodeFlow() && !authClient.isPKCE();\n  const options = settings.toJSON({ verbose: true });\n  const getTokenOptions = {};\n\n  _.extend(\n    getTokenOptions,\n    _.pick(options, 'clientId', 'redirectUri'),\n    _.pick(options.authParams, AUTH_PARAMS),\n    params\n  );\n\n  // Extra Options for Social Idp popup window title and id_token response timeout\n  getTokenOptions.popupTitle = loc('socialauth.popup.title', 'login');\n  getTokenOptions.timeout = options.oAuthTimeout;\n\n  // Redirect flow - this can be used when logging into an external IDP, or\n  // converting the Okta sessionToken to an access_token, id_token, and/or\n  // authorization code. Note: The authorization code flow will always redirect.\n  if (options.redirect === 'always' || isAuthorizationCodeFlow) {\n    authClient.token.getWithRedirect(getTokenOptions).catch(error);\n  } else if (getTokenOptions.sessionToken) {\n    // Default flow if logging in with Okta as the IDP - convert sessionToken to\n    // tokens in a hidden iframe. Used in Single Page Apps where the app does\n    // not want to redirect away from the page to convert the token.\n    authClient.token.getWithoutPrompt(getTokenOptions).then(success).catch(error);\n  } else {\n    // Default flow if logging in with an external IDP - opens a popup and\n    // gets the token from a postMessage response.\n    authClient.token.getWithPopup(getTokenOptions).then(success).catch(error);\n  }\n};\n\nexport default util;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 47], max-statements: [2, 63] */\n\nimport { _, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport Enums from 'util/Enums';\nimport ErrorCodes from 'util/ErrorCodes';\nimport { ConfigError, UnsupportedBrowserError } from 'util/Errors';\nimport OAuth2Util from 'util/OAuth2Util';\nimport Util from 'util/Util';\nconst fn = {};\nconst verifyUrlTpl = hbs('signin/verify/{{provider}}/{{factorType}}');\nconst verifyUrlMultipleTpl = hbs('signin/verify/{{provider}}/{{factorType}}/{{factorIndex}}');\nconst verifyUrlNoProviderTpl = hbs('signin/verify/{{factorType}}');\nconst enrollFactorUrlTpl = hbs('signin/enroll/{{provider}}/{{factorType}}');\nconst activateFactorUrlTpl = hbs('signin/enroll-activate/{{provider}}/{{factorType}}{{#if step}}/{{step}}{{/if}}');\nconst recoveryUrlTpl = hbs('signin/recovery/{{recoveryToken}}');\nconst refreshUrlTpl = hbs('signin/refresh-auth-state{{#if token}}/{{token}}{{/if}}');\nconst signinWithUsernameUrlTpl = hbs('signin/okta/{{username}}');\nconst sessionCookieRedirectTpl = hbs(\n  // eslint-disable-next-line max-len\n  '{{baseUrl}}/login/sessionCookieRedirect?checkAccountSetupComplete=true&token={{{token}}}&redirectUrl={{{redirectUrl}}}'\n);\nconst deviceActivationStatuses = ['DEVICE_ACTIVATED', 'DEVICE_NOT_ACTIVATED_CONSENT_DENIED', 'DEVICE_NOT_ACTIVATED'];\n\nfn.isHostBackgroundChromeTab = function() {\n  // Checks if the SIW is loaded in a chrome webview and\n  // it is in an app that is in background.\n  if (navigator.userAgent.match(/Android/) && navigator.userAgent.match(/Chrome/) && document.hidden) {\n    return true;\n  } else {\n    return false;\n  }\n};\n\nfn.isDocumentVisible = function() {\n  return document.visibilityState === 'visible';\n};\n\nfn.createVerifyUrl = function(provider, factorType, factorIndex) {\n  if (provider && factorIndex) {\n    return verifyUrlMultipleTpl({\n      provider: encodeURIComponent(provider.toLowerCase()),\n      factorType: encodeURIComponent(factorType),\n      factorIndex: encodeURIComponent(factorIndex),\n    });\n  } else if (provider) {\n    return verifyUrlTpl({\n      provider: encodeURIComponent(provider.toLowerCase()),\n      factorType: encodeURIComponent(factorType),\n    });\n  } else {\n    return verifyUrlNoProviderTpl({\n      factorType: encodeURIComponent(factorType),\n    });\n  }\n};\n\nfn.createEnrollFactorUrl = function(provider, factorType) {\n  return enrollFactorUrlTpl({\n    provider: encodeURIComponent(provider.toLowerCase()),\n    factorType: encodeURIComponent(factorType),\n  });\n};\n\nfn.createActivateFactorUrl = function(provider, factorType, step) {\n  return activateFactorUrlTpl({\n    provider: encodeURIComponent(provider.toLowerCase()),\n    factorType: encodeURIComponent(factorType),\n    step: step ? encodeURIComponent(step) : false,\n  });\n};\n\nfn.createRecoveryUrl = function(recoveryToken) {\n  return recoveryUrlTpl({\n    recoveryToken: encodeURIComponent(recoveryToken),\n  });\n};\n\nfn.createRefreshUrl = function(stateToken) {\n  const token = stateToken ? encodeURIComponent(stateToken) : null;\n\n  return refreshUrlTpl({ token: token });\n};\n\nfn.createSigninUrl = function(username) {\n  return username ? signinWithUsernameUrlTpl({ username: encodeURIComponent(username) }) : 'signin';\n};\n\nfn.routeAfterAuthStatusChangeError = function(router, err) {\n  if (!err) {\n    return;\n  }\n\n  // Global error handling for CORS enabled errors\n  if (err.xhr && BrowserFeatures.corsIsNotEnabled(err.xhr)) {\n    router.settings.callGlobalError(new UnsupportedBrowserError(loc('error.enabled.cors')));\n    return;\n  }\n\n  // Token has expired - no longer valid. Navigate back to primary auth.\n  if (err.errorCode === ErrorCodes.INVALID_TOKEN_EXCEPTION) {\n    router.appState.set('flashError', err);\n    router.controller.state.set('navigateDir', Enums.DIRECTION_BACK);\n    if (router.settings.get('features.mfaOnlyFlow')) {\n      router.navigate('signin/error', { trigger: true });\n    } else {\n      router.navigate('', { trigger: true });\n    }\n    return;\n  }\n\n  Util.triggerAfterError(router.controller, err);\n};\n\nfn.routeAfterAuthStatusChange = function(router, res) {\n  // Other errors are handled by the function making the authClient request\n  if (!res || !res.status) {\n    router.appState.clearLastAuthResponse();\n    return;\n  }\n\n  router.appState.setAuthResponse(res);\n\n  if (router.controller && router.controller.trapAuthResponse(res)) {\n    return;\n  }\n\n  fn.handleResponseStatus(router, res);\n};\n\nfn.handleResponseStatus = function(router, res) {\n  switch (res.status) {\n  case 'SUCCESS': {\n    handleSuccessResponseStatus(router, res);\n    return;\n  }\n  case 'ADMIN_CONSENT_REQUIRED':\n    router.navigate('signin/admin-consent', { trigger: true });\n    return;\n  case 'CONSENT_REQUIRED':\n    router.navigate('signin/consent', { trigger: true });\n    return;\n  case 'DEVICE_ACTIVATE':\n    router.navigate('signin/device-activate', { trigger: true });\n    return;\n    // We want the same view for FACTOR_REQUIRED & FACTOR_CHALLENGE\n    // In the new idx pipeline FACTOR_CHALLENGE API response does not contain a prev link\n  case 'FACTOR_REQUIRED':\n  case 'FACTOR_CHALLENGE':\n  case 'MFA_REQUIRED': {\n    const lastFailedChallengeFactorData = router.appState.get('lastFailedChallengeFactorData');\n    // When the widget is bootstrapped with an error in MFA_CHALLENGE state, we pass the\n    // lastFailedChallengeFactorData to MFA_REQUIRED, in order to show the error message\n    // on the correct factor view\n\n    if (lastFailedChallengeFactorData && lastFailedChallengeFactorData.factor) {\n      router.appState.get('factors').lastUsedFactor = lastFailedChallengeFactorData.factor;\n    }\n    const factor = router.appState.get('factors').getDefaultFactor();\n    const url = fn.createVerifyUrl(factor.get('provider'), factor.get('factorType'));\n\n    router.navigate(url, { trigger: true });\n    router.appState.clearLastFailedChallengeFactorData();\n    return;\n  }\n  case 'POLL': {\n    const pollUrl = 'signin/poll';\n\n    router.navigate(pollUrl, { trigger: true });\n    return;\n  }\n  case 'MFA_CHALLENGE':\n    // Since we normally trap MFA_CHALLENGE, this will only get called on a\n    // page refresh or when an error is returned on verification with an IdP.\n    // We need to return to MFA_REQUIRED to initialize the\n    // page correctly (i.e. factors dropdown, etc)\n    if (router.appState.get('isFactorResultFailed')) {\n      router.appState.setLastFailedChallengeFactorData();\n    }\n    router.appState.get('transaction').prev().then(function(trans) {\n      router.appState.set('transaction', trans);\n    });\n    // TODO: catch/handle error here?\n    return;\n  case 'MFA_ENROLL':\n  case 'FACTOR_ENROLL':\n    router.navigate('signin/enroll', { trigger: true });\n    return;\n  case 'MFA_ENROLL_ACTIVATE':\n  case 'FACTOR_ENROLL_ACTIVATE': {\n    const activateUrl = fn.createActivateFactorUrl(\n      router.appState.get('activatedFactorProvider'),\n      router.appState.get('activatedFactorType')\n    );\n\n    router.navigate(activateUrl, { trigger: true });\n    return;\n  }\n  case 'PASSWORD_WARN':\n  case 'PASSWORD_EXPIRED':\n    if (router.settings.get('features.customExpiredPassword') && !router.appState.get('isPwdManagedByOkta')) {\n      router.navigate('signin/custom-password-expired', { trigger: true });\n    } else {\n      router.navigate('signin/password-expired', { trigger: true });\n    }\n    return;\n  case 'RECOVERY_CHALLENGE': {\n    const fromEmail = res.factorType.toLowerCase() === Enums.RECOVERY_FACTOR_TYPE_EMAIL.toLowerCase();\n    const isForgotPassword = res.recoveryType === Enums.RECOVERY_TYPE_PASSWORD;\n    const isUnlock = res.recoveryType === Enums.RECOVERY_TYPE_UNLOCK;\n    // Will use this workaround (lowercasing response) until OKTA-69083 is resolved\n\n    if (isForgotPassword && fromEmail) {\n      router.navigate('signin/recovery-emailed', { trigger: true });\n    } else if (isUnlock && fromEmail) {\n      router.navigate('signin/unlock-emailed', { trigger: true });\n    } else {\n      router.navigate('signin/recovery-challenge', { trigger: true });\n    }\n    return;\n  }\n  case 'RECOVERY':\n    router.navigate('signin/recovery-question', { trigger: true });\n    return;\n  case 'PASSWORD_RESET':\n    router.navigate('signin/password-reset', { trigger: true });\n    return;\n  case 'LOCKED_OUT': {\n    if (router.settings.get('features.selfServiceUnlock')) {\n      router.navigate('signin/unlock', { trigger: true });\n    } else {\n      const errorMessage = loc('error.auth.lockedOut', 'login');\n      const resError = {\n        responseJSON: {\n          errorCauses: [],\n          errorSummary: errorMessage,\n          errorCode: 'E0000119',\n        },\n      };\n      const err = {\n        name: 'AuthApiError',\n        message: errorMessage,\n        xhr: resError\n      };\n      router.controller.model.appState.trigger('removeLoading');\n      router.controller.model.trigger('error', router.controller.model, resError);\n      Util.triggerAfterError(router.controller, err);\n    }\n    return;\n  }\n  case 'PROFILE_REQUIRED':\n    router.navigate('signin/enroll-user', { trigger: true });\n    return;\n  case 'UNAUTHENTICATED':\n    // Either we have factors and we are in passwordlessAuth mode\n    if (router.appState.get('promptForFactorInUnauthenticated')) {\n      const defaultFactor = router.appState.get('factors').getDefaultFactor();\n      const factorURL = fn.createVerifyUrl(defaultFactor.get('provider'), defaultFactor.get('factorType'));\n\n      router.navigate(factorURL, { trigger: true });\n      return;\n    }\n    // Or we're in device flow and we need to force idp discovery check\n    if (router.appState.get('usingDeviceFlow')) {\n      router.navigate('signin/idp-discovery-check', { trigger: true });\n      return;\n    }\n    // Or we don't have anything and we need to show the login page\n    router.navigate('', { trigger: true });\n    return;\n  default:\n    throw new Error('Unknown status: ' + res.status);\n  }\n};\n\nfunction handleSuccessResponseStatus(router, res) {\n  if (res.recoveryType === Enums.RECOVERY_TYPE_UNLOCK) {\n    router.navigate('signin/account-unlocked', { trigger: true });\n    return;\n  }\n\n  if (_.contains(deviceActivationStatuses, res._embedded?.deviceActivationStatus)) {\n    router.navigate('signin/device-activate-complete', { trigger: true });\n    return;\n  }\n\n  // If the desired end result object needs to have idToken (and not sessionToken),\n  // get the id token from session token before calling the global success function.\n  if (router.settings.get('oauth2Enabled')) {\n    OAuth2Util.getTokens(router.settings, { sessionToken: res.sessionToken }, router.controller);\n    return;\n  }\n\n  const successData = {\n    user: res._embedded.user,\n    type: res.type || Enums.SESSION_SSO,\n  };\n\n  if (res.relayState) {\n    successData.relayState = res.relayState;\n  }\n\n  const redirectFn = router.settings.get('redirectUtilFn');\n  const nextUrl = res?._links?.original?.href || res?._links?.next?.href;\n\n  if (res.type === Enums.SESSION_STEP_UP) {\n    const targetUrl = res?._links?.next?.href;\n\n    successData.stepUp = {\n      url: targetUrl,\n      finish: function() {\n        redirectFn(targetUrl);\n      },\n    };\n  } else {\n    if (nextUrl) {\n      successData.next = function() {\n        redirectFn(nextUrl);\n      };\n    } else {\n      // Add the type for now until the API returns it.\n      successData.type = Enums.SESSION_SSO;\n    }\n\n    if (res.sessionToken) {\n      successData.session = {\n        token: res.sessionToken,\n        setCookieAndRedirect: function(redirectUri) {\n          if (redirectUri) {\n            Util.debugMessage(`\n              Passing a \"redirectUri\" to \"setCookieAndRedirect\" is strongly discouraged.\n              It is recommended to set a \"redirectUri\" option in the config object passed to the widget constructor.\n            `);\n          }\n\n          redirectUri = redirectUri || router.settings.get('redirectUri');\n          if (!redirectUri) {\n            throw new ConfigError('\"redirectUri\" is required');\n          }\n\n          redirectFn(\n            sessionCookieRedirectTpl({\n              baseUrl: router.settings.get('baseUrl'),\n              token: encodeURIComponent(res.sessionToken),\n              redirectUrl: encodeURIComponent(redirectUri),\n            })\n          );\n        },\n      };\n    }\n  }\n\n  // Check if we need to wait for redirect based on host.\n  if (fn.isHostBackgroundChromeTab()) {\n    document.addEventListener('visibilitychange', function checkVisibilityAndCallSuccess() {\n      if (fn.isDocumentVisible()) {\n        document.removeEventListener('visibilitychange', checkVisibilityAndCallSuccess);\n        router.settings.callGlobalSuccess(Enums.SUCCESS, successData);\n      }\n    });\n  } else {\n    router.settings.callGlobalSuccess(Enums.SUCCESS, successData);\n  }\n}\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport default {\n  INVALID_TOKEN_EXCEPTION: 'E0000011',\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FactorUtil from 'util/FactorUtil';\nimport RouterUtil from 'v1/util/RouterUtil';\nexport default View.extend({\n  className: 'scan-instructions clearfix',\n  template:  hbs`\n    <div class=\"scan-instructions-details-wrapper\">\n      <div class=\"scan-instructions-details\">\n        <p>{{instructions}}</p>\n      </div>\n    </div>\n    <div class=\"scan-instructions-qrcode-wrapper\">\n      <div class=\"qrcode-wrap\">\n        <img data-se=\"qrcode\" alt=\"{{altQRCode}}\" class=\"qrcode-image\" src=\"{{qrcode}}\">\n        <div data-se=\"qrcode-success\" class=\"qrcode-success\"></div>\n        <div data-se=\"qrcode-error\" class=\"qrcode-error\"></div>\n      </div>\n      <a href=\"#\" data-type=\"manual-setup\" data-se=\"manual-setup\" class=\"link manual-setup\"\n      aria-label=\"{{i18n code=\"enroll.totp.aria.cannotScan\" bundle=\"login\" }}\">\n        {{i18n code=\"enroll.totp.cannotScan\" bundle=\"login\"}}\n      </a>\n      <a href=\"#\" data-type=\"refresh-qrcode\" data-se=\"refresh-qrcode\" class=\"link refresh-qrcode\">\n        {{i18n code=\"enroll.totp.refreshBarcode\" bundle=\"login\"}}\n      </a>\n    </div>\n  `,\n\n  events: {\n    'click [data-type=\"manual-setup\"]': function(e) {\n      e.preventDefault();\n      const url = RouterUtil.createActivateFactorUrl(\n        this.model.get('__provider__'),\n        this.model.get('__factorType__'),\n        'manual'\n      );\n      if (this.model.get('__factorType__') === 'push') {\n        // cancel the poll and navigate to manual setup.\n        this.model\n          .doTransaction(function(transaction) {\n            return transaction.prev().then(function(trans) {\n              const factor = _.findWhere(trans.factors, {\n                factorType: 'push',\n                provider: 'OKTA',\n              });\n\n              return factor.enroll();\n            });\n          })\n          .then(() => {\n            this.options.appState.trigger('navigate', url);\n          });\n      } else {\n        this.options.appState.trigger('navigate', url);\n      }\n    },\n    'click [data-type=\"refresh-qrcode\"]': function(e) {\n      e.preventDefault();\n      this.model.trigger('errors:clear');\n\n      const self = this;\n\n      this.model\n        .doTransaction(function(transaction) {\n          if (this.appState.get('isWaitingForActivation')) {\n            return transaction.poll();\n          } else {\n            return transaction.activate();\n          }\n        })\n        .then(function(trans) {\n          const res = trans.data;\n\n          if (\n            (res.status === 'MFA_ENROLL_ACTIVATE' || res.status === 'FACTOR_ENROLL_ACTIVATE') &&\n            res.factorResult === 'WAITING'\n          ) {\n            // defer the render here to have a lastResponse set in AppState\n            // so that we get new QRcode rendered\n            _.defer(_.bind(self.render, self));\n          }\n        });\n    },\n  },\n\n  initialize: function() {\n    this.listenTo(this.options.appState, 'change:lastAuthResponse', function() {\n      if (this.options.appState.get('isMfaEnrollActivate')) {\n        this.$el.toggleClass('qrcode-expired', !this.options.appState.get('isWaitingForActivation'));\n      } else if (this.options.appState.get('isSuccessResponse')) {\n        this.$el.addClass('qrcode-success');\n      }\n    });\n    this.listenTo(this.model, 'error', function() {\n      if (this.options.appState.get('isMfaEnrollActivate')) {\n        this.$el.toggleClass('qrcode-expired', true);\n      }\n    });\n  },\n\n  getTemplateData: function() {\n    const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n    let instructions;\n\n    if (this.model.get('__provider__') === 'GOOGLE') {\n      instructions = loc('enroll.totp.setupGoogleAuthApp', 'login', [factorName]);\n    } else {\n      instructions = loc('enroll.totp.setupApp', 'login', [factorName]);\n    }\n    return {\n      instructions: instructions,\n      qrcode: this.options.appState.get('qrcode'),\n      altQRCode: loc('mfa.altQrCode', 'login')\n    };\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport BarcodeView from 'v1/views/enroll-factors/BarcodeView';\nimport Footer from 'v1/views/enroll-factors/Footer';\nconst PUSH_INTERVAL = 6000;\n\n// Note: Keep-alive is set to 5 seconds - using 5 seconds here will result\n// in network connection lost errors in Safari and IE.\n\nexport default FormController.extend({\n  className: 'barcode-push',\n  Model: function() {\n    return {\n      local: {\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n    };\n  },\n\n  Form: {\n    title: function() {\n      const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n\n      return loc('enroll.totp.title', 'login', [factorName]);\n    },\n    noButtonBar: true,\n    attributes: { 'data-se': 'step-scan' },\n    className: 'barcode-scan',\n    initialize: function() {\n      this.listenTo(this.model, 'error errors:clear', function() {\n        this.clearErrors();\n      });\n    },\n\n    formChildren: [FormType.View({ View: BarcodeView })],\n  },\n\n  Footer: Footer,\n\n  initialize: function() {\n    this.pollForEnrollment().catch(()=>{\n      // Ignoring the errors for now. \n      // clean up will be done based on OKTA-324849\n    });\n  },\n\n  pollForEnrollment: function() {\n    return this.model.doTransaction(function(transaction) {\n      return transaction.poll(PUSH_INTERVAL);\n    });\n  },\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate')) {\n      return true;\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport RouterUtil from 'v1/util/RouterUtil';\nimport BarcodeView from 'v1/views/enroll-factors/BarcodeView';\nimport Footer from 'v1/views/enroll-factors/Footer';\nexport default FormController.extend({\n  className: 'barcode-totp',\n  Model: function() {\n    return {\n      local: {\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n    };\n  },\n\n  Form: {\n    title: function() {\n      const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n\n      return loc('enroll.totp.title', 'login', [factorName]);\n    },\n    save: _.partial(loc, 'oform.next', 'login'),\n    noCancelButton: true,\n    attributes: { 'data-se': 'step-scan' },\n    className: 'barcode-scan',\n\n    formChildren: [FormType.View({ View: BarcodeView })],\n  },\n\n  Footer: Footer,\n\n  initialize: function() {\n    this.listenTo(this.form, 'save', function() {\n      const url = RouterUtil.createActivateFactorUrl(\n        this.model.get('__provider__'),\n        this.model.get('__factorType__'),\n        'activate'\n      );\n\n      this.options.appState.trigger('navigate', url);\n    });\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View, _ } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport '@okta/qtip';\nexport default View.extend({\n  className: 'scope-item',\n  template: hbs(\n    '\\\n      <div class=\"{{classNames}}\">\\\n        <p>{{name}}</p>\\\n      </div>\\\n      {{#if description}}\\\n        <span class=\"scope-item-tooltip icon form-help-16\"></span>\\\n      {{/if}}\\\n    '\n  ),\n  getTemplateData() {\n    const { name, description, isCustomized } = this.options;\n    const baseClass = 'scope-item-text';\n    const classNames = (name === 'openid' || isCustomized)\n      ? `${baseClass} no-translate`: baseClass;\n    return { classNames, name, description };\n  },\n\n  postRender: function() {\n    this.$('.scope-item-tooltip').qtip({\n      content: {\n        text: _.escape(this.options.description),\n      },\n      style: { classes: 'okta-tooltip qtip-custom qtip-shadow' },\n      position: {\n        my: 'bottom right',\n        target: 'mouse',\n      },\n    });\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport ScopeItem from './ScopeItem';\nexport default View.extend({\n  className: 'scope-list detail-row',\n\n  postRender: function() {\n    this.model.get('scopes').forEach(scope => {\n      this.add(ScopeItem, {\n        options: {\n          name: scope.displayName || scope.name,\n          description: scope.description,\n          isCustomized: scope.isCustomized,\n        },\n      });\n    });\n  },\n});\n","import { _, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst CheckBox = internal.views.forms.inputs.CheckBox;\n\nexport default CheckBox.extend({\n  template: hbs`\n    <input type=\"checkbox\" name=\"{{name}}\" id=\"{{inputId}}\"/>\n    <label for=\"{{inputId}}\" data-se-for-name=\"{{name}}\"><b>{{placeholder}}</b><p>{{desc}}</p></label>\n  `,\n\n  /**\n     * @Override\n     */\n  enable: function() {\n    if (this.options.options.optional) {\n      this.$(':input').prop('disabled', false);\n    }\n  },\n\n  /**\n     * @Override\n     */\n  editMode: function() {\n\n    this.$el.html(this.template(_.extend(_.omit(this.options, 'placeholder'), {\n      placeholder: this.options.placeholder || this.options.name,\n      desc: this.options.options.description\n    })));\n\n    this.$(':checkbox').prop('checked', this.getModelValue() || false);\n\n    this.$('input').customInput();\n    this.model.trigger('form:resize');\n\n    if (!this.options.options.optional) {\n      const input = this.$('input').get(0);\n      this.$(input.parentElement).addClass('o-form-read-mode');\n      this.$(':checkbox').prop('disabled', true);\n    }\n\n    if (this.options.name === 'openid' || this.options.options.isCustomized) {\n      this.$('label > b').addClass('no-translate');\n      if (this.options.options.isCustomized) {\n        this.$('label > p').addClass('no-translate');\n      }\n    }\n\n    return this;\n  },\n\n});","import { loc, View } from '@okta/courage';\nimport Enums from 'util/Enums';\n\nexport default View.extend({\n  tagName: 'a',\n  className: 'skip-to-content-link',\n  attributes: { href: `#${Enums.WIDGET_CONTAINER_ID}` },\n  initialize: function initialize() {\n    this.$el.append(loc('skip.to.main.content', 'login'));\n  }\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-len: [2, 160] */\nimport { _, $, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport ScopeList from 'v1/views/consent/ScopeList';\nimport ScopeCheckBox from 'v1/views/consent/ScopeCheckBox';\nimport SkipLink from 'v1/views/shared/SkipLink';\nimport consentLogoHeaderTemplate from 'v1/views/shared/templates/consentLogoHeaderTemplate';\n\nconst granularConsentHeaderTemplate = hbs`\n  {{#if clientURI}}\n    <a href=\"{{clientURI}}\" class=\"client-logo-link\" target=\"_blank\">\n  {{/if}}\n  {{#if customLogo}}\n    <img class=\"client-logo custom-logo\" src=\"{{customLogo}}\" alt=\"{{i18n code=\"common.logo.alt\" bundle=\"login\"}}\" aria-hidden=\"true\" />\n  {{else}}\n    <img class=\"client-logo default-logo\" src=\"{{defaultLogo}}\" alt=\"{{i18n code=\"common.logo.alt\" bundle=\"login\"}}\" aria-hidden=\"true\" />\n  {{/if}}\n  {{#if clientURI}}\n    </a>\n  {{/if}}\n  <h1>\n    <span class=\"title-text\">\n        {{i18n \n            code=\"granular.consent.scopes.title\" bundle=\"login\" \n            arguments=\"appName\"\n            $1=\"<b class='no-translate'>$1</b>\"\n            $2=\"<p>$2</p>\"\n        }}\n    </span>\n    {{#if issuer}}\n      <div class=\"issuer\"><span>{{issuer}}</span></div>\n    {{/if}}\n  </h1>`;\n\nconst getConsentHeader = (template) => FormType.View({\n  View: View.extend({\n    className: 'consent-title detail-row',\n    template,\n    getTemplateData: function() {\n      const appState = this.options.appState;\n      return {\n        appName: appState.escape('targetLabel'),\n        customLogo: appState.get('targetLogo') && appState.get('targetLogo').href,\n        defaultLogo: appState.get('defaultAppLogo'),\n        clientURI: appState.get('targetClientURI') && appState.get('targetClientURI').href,\n      };\n    },\n  }),\n});\n\nconst consentRequiredDescription = FormType.View({\n  View: View.extend({\n    className: 'consent-description detail-row',\n    template: hbs`<p>{{i18n code=\"consent.required.description\" bundle=\"login\"}}</p>`,\n  }),\n});\n\nconst granularConsentDescription = FormType.View({\n  View: View.extend({\n    className: 'consent-description',\n    template: hbs`<p>{{i18n code=\"granular.consent.scopes.description\" bundle=\"login\"}}</p>`,\n  }),\n});\n\nconst getScopeCheckBoxes = (scopes) => {\n  const sortedScopes = scopes.slice().sort((scope1, scope2) => scope2.optional - scope1.optional);\n  return _.map(sortedScopes, ({name, displayName, description, optional, isCustomized}) => FormType.Input({\n    name: name,\n    input: ScopeCheckBox,\n    placeholder: displayName,\n    label: false,\n    modelType: 'boolean',\n    required: true,\n    options:\n        {\n          description,\n          optional,\n          isCustomized\n        }\n  }));\n};\n\nconst isGranularConsent = (appState) => {\n  return 'optional' in appState.get('scopes')[0];\n};\n\nexport default FormController.extend({\n  className: 'consent-required',\n  initialize: function() {\n    this.model.set('expiresAt', this.options.appState.get('expiresAt'));\n    this.model.set('scopes', this.options.appState.get('scopes'));\n    this.listenTo(this.form, 'cancel', _.bind(this.model.cancel, this.model));\n\n    // add Skip to main content link\n    const skipLink = new SkipLink();\n    $(`#${Enums.WIDGET_LOGIN_CONTAINER_ID}`).prepend(skipLink.render().$el);\n\n    if (isGranularConsent(this.options.appState)) {\n      this.$el.addClass('granular-consent').removeClass('consent-required');\n      this.form.cancel = _.partial(loc, 'oform.cancel', 'login');\n      _.forEach(this.options.appState.get('scopes'), scope => {\n        this.model.set(scope.name, true);\n      });\n    }\n  },\n  postRender: function() {\n    FormController.prototype.postRender.apply(this, arguments);\n\n    // Update the \"don't allow\" and \"allow access\" buttons to be neutral by changing \"allow button\" to be gray.\n    this.$('.o-form-button-bar .button-primary').removeClass('button-primary');\n  },\n  Model: {\n    props: {\n      expiresAt: ['string', true],\n      scopes: ['array', true],\n    },\n    save: function() {\n      return this.doTransaction(function(transaction) {\n        let scopeNames = _.pluck(this.get('scopes'), 'name');\n        let consent = { expiresAt: this.get('expiresAt') };\n        if (isGranularConsent(this)) {\n          consent['optedScopes'] =  _.reduce(scopeNames, (optedScopes, scope) => { optedScopes[scope] = this.get(scope); return optedScopes; }, {});\n        } else {\n          consent['scopes'] = scopeNames;\n        }\n        return transaction.consent({ consent });\n      });\n    },\n    cancel: function() {\n      const self = this;\n\n      return this.doTransaction(function(transaction) {\n        return transaction.cancel();\n      }).then(function() {\n        const consentCancelFn = self.settings.get('consent.cancel');\n\n        if (_.isFunction(consentCancelFn)) {\n          consentCancelFn();\n        }\n      });\n    },\n  },\n  Form: {\n    noCancelButton: false,\n    buttonOrder: ['cancel', 'save'],\n    autoSave: true,\n    save: _.partial(loc, 'consent.required.consentButton', 'login'),\n    cancel: _.partial(loc, 'consent.required.cancelButton', 'login'),\n    formChildren: function() {\n      if (isGranularConsent(this.options.appState)) {\n        return [\n          getConsentHeader(granularConsentHeaderTemplate),\n          granularConsentDescription,\n        ].concat(getScopeCheckBoxes(this.options.appState.get('scopes')));\n      } else {\n        return [\n          getConsentHeader(consentLogoHeaderTemplate),\n          FormType.View({\n            View: new ScopeList({ model: this.model }),\n          }),\n          consentRequiredDescription\n        ];\n      }\n    },\n  },\n  Footer: View.extend({\n    className: 'consent-footer',\n    template: hbs(\n      '\\\n        {{#if termsOfService}}\\\n          <a class=\"terms-of-service\" href=\"{{termsOfService}}\" target=\"_blank\">{{i18n code=\"consent.required.termsOfService\" bundle=\"login\"}}</a>\\\n          {{#if privacyPolicy}}\\\n            &#8226\\\n          {{/if}}\\\n        {{/if}}\\\n        {{#if privacyPolicy}}\\\n          <a class=\"privacy-policy\" href=\"{{privacyPolicy}}\" target=\"_blank\">{{i18n code=\"consent.required.privacyPolicy\" bundle=\"login\"}}</a>\\\n        {{/if}}\\\n      '\n    ),\n    getTemplateData: function() {\n      const appState = this.options.appState;\n\n      return {\n        termsOfService: appState.get('targetTermsOfService') && appState.get('targetTermsOfService').href,\n        privacyPolicy: appState.get('targetPrivacyPolicy') && appState.get('targetPrivacyPolicy').href,\n      };\n    },\n  }),\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nconst { Util } = internal.util;\nexport default View.extend({\n  template: hbs(\n    '\\\n      {{#if passwordWarn}}\\\n        <a href=\"#\" class=\"link help js-skip\" data-se=\"skip-link\">\\\n          {{i18n code=\"password.expiring.later\" bundle=\"login\"}}\\\n        </a>\\\n      {{/if}}\\\n      <a href=\"#\" class=\"link help goto js-signout\" data-se=\"signout-link\">\\\n        {{i18n code=\"signout\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer clearfix',\n  events: {\n    'click .js-signout': function(e) {\n      e.preventDefault();\n      const self = this;\n      const authClient = self.settings.getAuthClient();\n\n      this.model\n        .doTransaction(function(transaction) {\n          return transaction.cancel();\n        })\n        .then(function() {\n          return authClient.session.exists();\n        })\n        .then(function(sessionExists) {\n          if (sessionExists) {\n            return authClient.closeSession().catch(() => {});\n          }\n        })\n        .then(function() {\n          if (self.settings.get('backToSignInUri')) {\n            Util.redirect(self.settings.get('backToSignInUri'));\n          } else {\n            self.state.set('navigateDir', Enums.DIRECTION_BACK);\n            self.options.appState.trigger('navigate', '');\n          }\n        });\n    },\n    'click .js-skip': function(e) {\n      e.preventDefault();\n      this.model.doTransaction(function(transaction) {\n        return transaction.skip();\n      });\n    },\n  },\n  getTemplateData: function() {\n    return { passwordWarn: this.options.appState.get('isPwdExpiringSoon') };\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, internal } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Footer from 'v1/views/expired-password/Footer';\nconst { Util } = internal.util;\nexport default FormController.extend({\n  className: 'custom-password-expired',\n  Model: {},\n  Form: {\n    noButtonBar: true,\n    title: function() {\n      const expiringSoon = this.options.appState.get('isPwdExpiringSoon');\n      const numDays = this.options.appState.get('passwordExpireDays');\n\n      if (expiringSoon && numDays > 0) {\n        return loc('password.expiring.title', 'login', [numDays]);\n      } else if (expiringSoon && numDays === 0) {\n        return loc('password.expiring.today', 'login');\n      } else if (expiringSoon) {\n        return loc('password.expiring.soon', 'login');\n      } else {\n        return this.settings.get('brandName')\n          ? loc('password.expired.title.specific', 'login', [this.settings.get('brandName')])\n          : loc('password.expired.title.generic', 'login');\n      }\n    },\n    subtitle: function() {\n      if (this.options.appState.get('isPwdExpiringSoon')) {\n        return this.settings.get('brandName')\n          ? loc('password.expiring.soon.subtitle.specific', 'login', [this.settings.get('brandName')])\n          : loc('password.expiring.soon.subtitle.generic', 'login');\n      }\n\n      return loc('password.expired.custom.subtitle', 'login');\n    },\n    formChildren: function() {\n      return [\n        FormType.Button({\n          title: _.partial(loc, 'password.expired.custom.submit', 'login', [\n            this.options.appState.get('passwordExpiredWebsiteName'),\n          ]),\n          className: 'button button-primary button-wide',\n          attributes: { 'data-se': 'custom-button' },\n          click: function() {\n            Util.redirect(this.options.appState.get('passwordExpiredLinkUrl'));\n          },\n        }),\n      ];\n    },\n  },\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-len: [2, 160] */\nimport hbs from '@okta/handlebars-inline-precompile';\nimport {loc, View} from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport TextBox from 'v1/views/shared/TextBox';\n\nconst InvalidUserCodeErrorView = View.extend({\n  template: hbs`\n      <div class=\"okta-form-infobox-error infobox infobox-error\" role=\"alert\">\n          <span class=\"icon error-16\"></span>\n           <p>{{i18n code=\"api.authn.error.PASSCODE_INVALID\" bundle=\"login\"}}</p>\n      </div>\n    `\n});\n\nexport default FormController.extend({\n  className: 'device-code-activate',\n  Model: function() {\n    return {\n      props: {\n        userCode: ['string', true, this.options?.appState?.get('userCode')],\n        stateToken: 'string',\n      },\n      save: function() {\n        const self = this;\n        return this.doTransaction(function(transaction) {\n          return transaction.deviceActivate({\n            userCode: self.get('userCode')\n          });\n        });\n      }\n    };\n  },\n  Form: {\n    noCancelButton: true,\n    autoSave: true,\n    save: function() {\n      return loc('oform.next', 'login');\n    },\n    title: function() {\n      return loc('device.code.activate.title', 'login');\n    },\n    subtitle() {\n      return loc('device.code.activate.subtitle', 'login');\n    },\n    formChildren: function() {\n      if (this.options.appState.get('deviceActivationStatus') === 'INVALID_USER_CODE') {\n        this.add(InvalidUserCodeErrorView, '.o-form-error-container');\n      }\n\n      return [\n        FormType.Input({\n          label: loc('device.code.activate.label', 'login'),\n          'label-top': true,\n          name: 'userCode',\n          input: TextBox,\n          inputId: 'user-code',\n          type: 'text',\n          inlineValidation: false,\n        })\n      ];\n    },\n    events: {\n      'keyup input[name=\"userCode\"]': function(e) {\n        e.preventDefault();\n        this.addHyphen(e);\n      }\n    },\n    addHyphen(evt) {\n      const currentVal = evt.target.value;\n      // add hyphen after 4th character\n      if (currentVal && currentVal.length === 4 && !['Backspace', 'Delete', '-'].includes(evt.key)) {\n        evt.target.value = currentVal.concat('-');\n      }\n    }\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-len: [2, 160] */\nimport {_, loc, View} from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\n\nconst DEVICE_ACTIVATED = 'DEVICE_ACTIVATED';\nconst DEVICE_NOT_ACTIVATED_CONSENT_DENIED = 'DEVICE_NOT_ACTIVATED_CONSENT_DENIED';\nconst DEVICE_NOT_ACTIVATED = 'DEVICE_NOT_ACTIVATED';\nconst DEVICE_CODE_ERROR_KEYS = [\n  DEVICE_NOT_ACTIVATED_CONSENT_DENIED,\n  DEVICE_NOT_ACTIVATED\n];\n\nexport default FormController.extend({\n  className: 'device-code-terminal',\n  postRender: function() {\n    FormController.prototype.postRender.apply(this, arguments);\n\n    // show device code terminal icons\n    const iconClass = this.options.appState.get('deviceActivationStatus') === DEVICE_ACTIVATED\n      ? 'success-24-green' : 'error-24-red';\n    this.$('.o-form-head').before('<div class=\"device-code-terminal--icon-container\">' +\n      '<span class=\"device-code-terminal--icon ' + iconClass + '\"></span>' +\n      '</div>');\n  },\n  Model: {},\n  Form: {\n    noCancelButton: true,\n    noButtonBar: true,\n    title: function() {\n      const deviceActivationStatus = this.options.appState.get('deviceActivationStatus');\n      if (deviceActivationStatus === DEVICE_ACTIVATED) {\n        return loc('device.code.activated.success.title', 'login');\n      }\n      if (_.contains(DEVICE_CODE_ERROR_KEYS, deviceActivationStatus)) {\n        return loc('device.code.activated.error.title', 'login');\n      }\n    },\n    subtitle: function() {\n      const deviceActivationStatus = this.options.appState.get('deviceActivationStatus');\n      if (deviceActivationStatus === DEVICE_ACTIVATED) {\n        return loc('idx.device.activated', 'login');\n      }\n      if (deviceActivationStatus === DEVICE_NOT_ACTIVATED_CONSENT_DENIED) {\n        return loc('idx.device.not.activated.consent.denied', 'login');\n      }\n      if (deviceActivationStatus === DEVICE_NOT_ACTIVATED) {\n        return loc('idx.device.not.activated.internal.error', 'login');\n      }\n    },\n    formChildren: function() {\n      return [\n        FormType.View({\n          View: View.extend({\n            template: hbs(\n              '{{#if isDeviceCodeError}}\\\n                  <a href=\"/activate\" class=\"button button-primary text-align-c retry-button\" data-se=\"try-again\">\\\n                    {{i18n code=\"oie.try.again\" bundle=\"login\"}}\\\n                  </a>\\\n               {{/if}}\\\n              '\n            ),\n            getTemplateData: function() {\n              return {\n                isDeviceCodeError: _.contains(DEVICE_CODE_ERROR_KEYS, this.options.appState.get('deviceActivationStatus'))\n              };\n            },\n          }),\n        }),\n      ];\n    }\n  }\n});\n","/*!\n * Copyright (c) 2018-2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, internal } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport Footer from 'v1/views/enroll-factors/Footer';\nconst { Util } = internal.util;\nexport default FormController.extend({\n  className: 'enroll-custom-factor',\n  Model: {\n    local: {\n      provider: 'string',\n      factorType: 'string',\n    },\n    save: function() {\n      return this.manageTransaction((transaction, setTransaction) => {\n        const factor = _.findWhere(transaction.factors, {\n          provider: this.get('provider'),\n          factorType: this.get('factorType'),\n        });\n\n        return factor\n          .enroll()\n          .then(trans => {\n            setTransaction(trans);\n            const url = this.appState.get('enrollCustomFactorRedirectUrl');\n\n            if (url !== null) {\n              Util.redirect(url);\n            }\n          })\n          .catch(function(err) {\n            throw err;\n          });\n      });\n    },\n  },\n\n  Form: function() {\n    const factors = this.options.appState.get('factors');\n    const factor = factors.findWhere({\n      provider: this.options.provider,\n      factorType: this.options.factorType,\n    });\n    const vendorName = factor.get('vendorName');\n    const subtitle = loc('enroll.customFactor.subtitle', 'login', [vendorName]);\n    const saveText = loc('enroll.customFactor.save', 'login');\n\n    return {\n      autoSave: true,\n      title: vendorName,\n      subtitle: subtitle,\n      save: saveText,\n    };\n  },\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate')) {\n      return true;\n    }\n  },\n\n  initialize: function() {\n    this.model.set('provider', this.options.provider);\n    this.model.set('factorType', this.options.factorType);\n  },\n\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n/* eslint complexity: [2, 13] */\nimport { _, loc, Collection } from '@okta/courage';\nimport Q from 'q';\nimport { AuthStopPollInitiationError } from 'util/Errors';\nimport factorUtil from 'util/FactorUtil';\nimport Util from 'util/Util';\nimport BaseLoginModel from './BaseLoginModel';\nconst PUSH_INTERVAL = 4000;\n\n// Avoid setting interval to same value as keep-alive time (5 seconds) because it\n// caused an occasional issue with network connection lost errors in Safari and IE\n\nconst FactorFactor = BaseLoginModel.extend({\n  extraProperties: true,\n  flat: false,\n\n  props: {\n    id: 'string',\n    factorType: {\n      type: 'string',\n      values: [\n        'sms',\n        'call',\n        'email',\n        'token',\n        'token:software:totp',\n        'token:hotp',\n        'token:hardware',\n        'question',\n        'push',\n        'u2f',\n        'password',\n        'assertion:saml2',\n        'assertion:oidc',\n        'claims_provider',\n        'webauthn',\n      ],\n    },\n    provider: {\n      type: 'string',\n      values: [\n        'OKTA',\n        'RSA',\n        'DEL_OATH',\n        'SYMANTEC',\n        'GOOGLE',\n        'YUBICO',\n        'FIDO',\n        'CUSTOM',\n        'GENERIC_SAML',\n        'GENERIC_OIDC',\n      ],\n    },\n    enrollment: {\n      type: 'string',\n      values: ['OPTIONAL', 'REQUIRED'],\n    },\n    status: {\n      type: 'string',\n      values: ['NOT_SETUP', 'ACTIVE'],\n    },\n    profile: ['object'],\n    vendorName: 'string',\n    policy: ['object'],\n    profiles: ['object'],\n  },\n\n  local: {\n    answer: 'string',\n    password: 'string',\n    backupFactor: 'object',\n    showAnswer: 'boolean',\n    rememberDevice: 'boolean',\n    autoPush: ['boolean', true, false],\n  },\n\n  derived: {\n    isOktaFactor: {\n      deps: ['provider'],\n      fn: function(provider) {\n        return provider === 'OKTA';\n      },\n    },\n    factorName: {\n      deps: ['provider', 'factorType'],\n      fn: factorUtil.getFactorName,\n    },\n    factorLabel: {\n      deps: ['provider', 'factorType', 'vendorName'],\n      fn: function(provider, factorType, vendorName) {\n        if (_.contains(['DEL_OATH', 'GENERIC_SAML', 'GENERIC_OIDC', 'CUSTOM'], provider)) {\n          return vendorName;\n        }\n        return factorUtil.getFactorLabel.apply(this, [provider, factorType]);\n      },\n    },\n    factorDescription: {\n      deps: ['provider', 'factorType'],\n      fn: factorUtil.getFactorDescription,\n    },\n    sortOrder: {\n      deps: ['provider', 'factorType'],\n      fn: factorUtil.getFactorSortOrder,\n    },\n    iconClassName: {\n      deps: ['provider', 'factorType'],\n      fn: factorUtil.getFactorIconClassName,\n    },\n    securityQuestion: {\n      deps: ['profile', 'factorType'],\n      fn: function(profile, factorType) {\n        if (factorType !== 'question') {\n          return null;\n        }\n        return profile && factorUtil.getSecurityQuestionLabel(profile);\n      },\n    },\n    phoneNumber: {\n      deps: ['profile', 'factorType'],\n      fn: function(profile, factorType) {\n        if (_.contains(['sms', 'call'], factorType)) {\n          return profile && profile.phoneNumber;\n        }\n        return null;\n      },\n    },\n    email: {\n      deps: ['profile', 'factorType'],\n      fn: function(profile, factorType) {\n        if (factorType === 'email') {\n          return profile && profile.email;\n        }\n        return null;\n      },\n    },\n    deviceName: {\n      deps: ['profile', 'factorType'],\n      fn: function(profile, factorType) {\n        if (factorType !== 'push') {\n          return null;\n        }\n        return profile && profile.name;\n      },\n    },\n    enrolled: {\n      deps: ['status'],\n      fn: function(status) {\n        return status === 'ACTIVE';\n      },\n    },\n    cardinality: {\n      deps: ['policy', 'profiles'],\n      fn: function(policy, profiles) {\n        if (profiles && profiles.length > 0) {\n          const profile = profiles[0];\n          //assume for now we only get one profile (multiple profiles are not supported yet)\n\n          const enrolled = profile._embedded.enrolledFactors.length;\n\n          const adoption = _.findWhere(profile._embedded.features, { type: 'adoption' });\n\n          if (adoption && adoption.cardinality) {\n            return {\n              enrolled: enrolled,\n              minimum: adoption.cardinality.min,\n              maximum: adoption.cardinality.max,\n            };\n          }\n          return false;\n        } else if (policy && policy.enrollment) {\n          return policy.enrollment;\n        } else {\n          return false;\n        }\n      },\n    },\n    additionalEnrollment: {\n      deps: ['cardinality'],\n      fn: function(cardinality) {\n        if (cardinality) {\n          return cardinality.enrolled !== 0 && cardinality.enrolled < cardinality.maximum;\n        } else {\n          return false;\n        }\n      },\n    },\n    required: {\n      deps: ['enrollment'],\n      fn: function(enrollment) {\n        return enrollment === 'REQUIRED';\n      },\n    },\n    canUseResend: {\n      deps: ['provider', 'factorType'],\n      fn: function(provider, factorType) {\n        // Only push, sms and call have resend links.\n        return provider === 'OKTA' && _.contains(['push', 'sms', 'call', 'email'], factorType);\n      },\n    },\n    isAnswerRequired: {\n      deps: ['factorType'],\n      fn: function(factorType) {\n        return _.contains(['sms', 'call', 'email', 'token', 'token:software:totp', 'question'], factorType);\n      },\n    },\n    isFactorTypeVerification: {\n      deps: ['provider', 'id'],\n      fn: function(provider, id) {\n        return provider === undefined && id === undefined;\n      },\n    },\n  },\n\n  parse: function(attributes) {\n    this.settings = attributes.settings;\n    this.appState = attributes.appState;\n    // set the initial value for remember device.\n    attributes.rememberDevice = factorUtil.getRememberDeviceValue(this.appState);\n\n    // Add vendorname for custom totp enroll\n    this.setCustomHotpVendorName(attributes);\n    return _.omit(attributes, ['settings', 'appState']);\n  },\n\n  validate: function() {\n    if (this.get('isAnswerRequired') && !this.get('answer')) {\n      return { answer: loc('model.validation.field.blank') };\n    } else if (this.get('factorType') === 'password' && !this.get('password')) {\n      return { password: loc('error.password.required') };\n    }\n  },\n  needsPasscode: function() {\n    // we don't need passcode for email with magic link flow\n    return !(this.options.appState.get('isIdxStateToken') && this.get('factorType') === 'email');\n  },\n  resend: function() {\n    this.trigger('form:clear-errors');\n    return this.manageTransaction(function(transaction) {\n      const firstLink = transaction.data._links.resend[0];\n\n      return transaction.resend(firstLink.name);\n    });\n  },\n\n  save: function() {\n    const rememberDevice = !!this.get('rememberDevice');\n    const self = this;\n    // Set/Remove the remember device cookie based on the remember device input.\n\n    return this.manageTransaction(function(transaction, setTransaction) {\n      const data = {\n        rememberDevice: rememberDevice,\n      };\n\n      if (this.get('factorType') === 'question') {\n        data.answer = this.get('answer');\n      } else if (this.get('factorType') === 'password') {\n        data.password = this.get('password');\n      } else if (this.needsPasscode()) {\n        data.passCode = this.get('answer');\n      }\n\n      if (this.pushFactorHasAutoPush()) {\n        data.autoPush = this.get('autoPush');\n      }\n\n      let promise;\n\n      // MFA_REQUIRED, FACTOR_REQUIRED or UNAUTHENTICATED with factors (passwordlessAuth)\n      if (\n        transaction.status === 'MFA_REQUIRED' ||\n        transaction.status === 'FACTOR_REQUIRED' ||\n        this.appState.get('promptForFactorInUnauthenticated')\n      ) {\n        const factor = this._findFactor(transaction);\n\n        promise = factor.verify(data);\n      } else if (this.get('canUseResend') && !this.get('answer') && transaction.resend) {\n        // MFA_CHALLENGE/ FACTOR_CHALLENGE\n        const firstLink = transaction.data._links.resend[0];\n\n        promise = transaction.resend(firstLink.name);\n      } else {\n        promise = transaction.verify(data);\n      }\n      //the 'save' event here is triggered and used in the BaseLoginController\n      //to disable the primary button on the factor form\n      this.trigger('save');\n\n      return promise.then(function(trans) {\n        const options = {\n          delay: PUSH_INTERVAL,\n          transactionCallBack: transaction => {\n            self.options.appState.set('lastAuthResponse', transaction);\n          },\n        };\n\n        setTransaction(trans);\n        // In Okta verify case we initiate poll.\n        if ((trans.status === 'MFA_CHALLENGE' && trans.poll) || (trans.status === 'FACTOR_CHALLENGE' && trans.poll)) {\n          const deferred = Q.defer();\n          const initiatePollTimout = Util.callAfterTimeout(deferred.resolve, PUSH_INTERVAL);\n          self.listenToOnce(self.options.appState, 'factorSwitched', () => {\n            clearTimeout(initiatePollTimout);\n            deferred.reject(new AuthStopPollInitiationError());\n          });\n          return deferred.promise.then(function() {\n            // Stop listening if factor was not switched before poll.\n            self.stopListening(self.options.appState, 'factorSwitched');\n            if (self.pushFactorHasAutoPush()) {\n              options.autoPush = function() {\n                return self.get('autoPush');\n              };\n              options.rememberDevice = function() {\n                return self.get('rememberDevice');\n              };\n            }\n            return trans.poll(options).then(function(trans) {\n              self.options.appState.set('lastAuthResponse', trans.data);\n              setTransaction(trans);\n            });\n          });\n        }\n      });\n    });\n  },\n\n  _findFactor: function(transaction) {\n    let factor;\n\n    if (transaction.factorTypes) {\n      factor = _.findWhere(transaction.factorTypes, {\n        factorType: this.get('factorType'),\n      });\n    }\n    if (!factor) {\n      factor = _.findWhere(transaction.factors, {\n        id: this.get('id'),\n      });\n    }\n    return factor;\n  },\n\n  pushFactorHasAutoPush: function() {\n    return this.settings.get('features.autoPush') && this.get('factorType') === 'push';\n  },\n\n  setCustomHotpVendorName: function(attributes) {\n    // If factor is token:hotp and not enrolled, we assume the first profile is the default.\n    // If factor is enrolled, we only support one profile to be enrolled, so find that one\n    // and display as enrolled profile. We do this by populating profile name in vendorName.\n    if (attributes.factorType === 'token:hotp' && attributes.profiles) {\n      if (attributes.status === 'NOT_SETUP') {\n        attributes.vendorName = attributes.profiles[0].name;\n      } else if (attributes.status === 'ACTIVE') {\n        const enrolledProfiles = attributes.profiles.filter(profile => {\n          return profile._embedded.enrolledFactors.length > 0;\n        });\n        attributes.vendorName = enrolledProfiles[0].name;\n      }\n    }\n    return attributes;\n  },\n});\nconst FactorFactors = Collection.extend({\n  model: FactorFactor,\n  comparator: 'sortOrder',\n\n  // One override necessary here - When Okta Verify OTP and Push are in the list,\n  // they are presented in the view as one factor - in the beacon menu,\n  // there's only one option (Okta Verify), and we show a form with Push\n  // with an inline totp option. What we need to do is to add totp\n  // as a \"backupFactor\" for push\n  parse: function(factors) {\n    // Keep a track of the last used factor, since\n    // we need it to determine the default factor.\n    this.lastUsedFactor = factors[0];\n\n    const oktaPushFactor = _.findWhere(factors, { provider: 'OKTA', factorType: 'push' });\n\n    let totpFactor;\n\n    if (_.where(factors, { factorType: 'push' }).length > 1) {\n      totpFactor = _.findWhere(factors, { factorType: 'token:software:totp' });\n    } else {\n      totpFactor = _.findWhere(factors, { provider: 'OKTA', factorType: 'token:software:totp' });\n    }\n    if (!oktaPushFactor || !totpFactor) {\n      return factors;\n    }\n\n    const isTotpFirst = totpFactor === factors[0];\n\n    const parsedFactors = _.reduce(\n      factors,\n      function(memo, factor) {\n        const isOkta = factor.provider === 'OKTA';\n        const isOktaTotp = isOkta && factor.factorType === 'token:software:totp';\n        const isOktaPush = isOkta && factor.factorType === 'push';\n        const notEnrolled = factor.status !== 'ACTIVE';\n        const hideOktaTotp = isOktaTotp && (notEnrolled || oktaPushFactor.status === 'ACTIVE');\n        const hideOktaPush = isOktaPush && notEnrolled && totpFactor.status === 'ACTIVE';\n\n        if (hideOktaTotp || hideOktaPush) {\n          return memo;\n        }\n\n        if (isOktaPush) {\n          factor.backupFactor = new FactorFactor(totpFactor, { parse: true });\n        }\n        memo.push(factor);\n        return memo;\n      },\n      []\n    );\n\n    // Use push factor instead of TOTP, if TOTP is first in the list\n    // (since it is stored as backupFactor for push).\n    if (isTotpFirst) {\n      this.lastUsedFactor = oktaPushFactor;\n    }\n\n    return parsedFactors;\n  },\n\n  // Will need to update this to use HAL link to get last used factor:\n  // https://oktainc.atlassian.net/browse/OKTA-58380\n  // However, current code returns last used factor as first factor in list.\n  // Also, will need to add priority - i.e. if they do not have a last used\n  // factor, should try Okta Verify, then Okta SMS, etc.\n  getDefaultFactor: function() {\n    const factor = _.pick(this.lastUsedFactor, 'factorType', 'provider');\n\n    return this.findWhere(factor);\n  },\n\n  getFirstUnenrolledRequiredFactor: function() {\n    return this.findWhere({ required: true, enrolled: false });\n  },\n\n  _getFactorsOfType: function(factorType) {\n    return this.where({ factorType: factorType });\n  },\n\n  getFactorIndex: function(factorType, factorId) {\n    return this._getFactorsOfType(factorType).findIndex(function(factor) {\n      return factor.get('id') === factorId;\n    });\n  },\n\n  hasMultipleFactorsOfSameType: function(factorType) {\n    return this._getFactorsOfType(factorType).length > 1;\n  },\n\n  getFactorByTypeAndIndex: function(factorType, factorIndex) {\n    return this._getFactorsOfType(factorType)[factorIndex];\n  },\n});\nexport default {\n  Model: FactorFactor,\n  Collection: FactorFactors,\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nconst template = hbs('\\\n    <span class=\"icon error-24\"></span>\\\n    <h4><strong>{{{message}}}</strong></h4>\\\n  ');\n\n// Have to be unescaped for the html in enroll.windowsHello.error.notConfiguredHtml\n\nexport default View.extend({\n  template: template,\n  className: 'okta-infobox-error infobox infobox-error infobox-md margin-btm-25',\n  attributes: {\n    'data-se': 'o-form-error-html',\n  },\n\n  message: '',\n\n  initialize: function(options) {\n    if (options && options.message) {\n      this.message = options.message;\n    }\n  },\n\n  getTemplateData: function() {\n    return {\n      message: this.message,\n    };\n  },\n});\n","/*!\n * Copyright (c) 2019-2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc, internal } from '@okta/courage';\nimport EnrollCustomFactorController from './EnrollCustomFactorController';\nimport Factor from 'v1/models/Factor';\nimport FormType from 'v1/util/FormType';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nconst { Util } = internal.util;\nexport default EnrollCustomFactorController.extend({\n  Model: {\n    local: {\n      provider: 'string',\n      factorType: 'string',\n    },\n    save: function() {\n      return this.manageTransaction(() => {\n        const url = this.appState.get('enrollCustomFactorRedirectUrl');\n\n        if (url !== null) {\n          Util.redirect(url);\n        }\n      });\n    },\n  },\n\n  Form: function() {\n    const factor = new Factor.Model(this.options.appState.get('factor'), this.toJSON());\n    const vendorName = factor.get('vendorName');\n    const subtitle = loc('enroll.customFactor.subtitle', 'login', [vendorName]);\n    const saveText = loc('enroll.customFactor.save', 'login');\n\n    return {\n      autoSave: true,\n      title: vendorName,\n      subtitle: subtitle,\n      save: saveText,\n      formChildren: function() {\n        const result = [];\n\n        if (this.options.appState.get('isFactorResultFailed')) {\n          result.push(\n            FormType.View(\n              { View: new HtmlErrorMessageView({ message: this.options.appState.get('factorResultErrorMessage') }) },\n              { selector: '.o-form-error-container' }\n            )\n          );\n        }\n        return result;\n      },\n    };\n  },\n});\n","/*!\n * Copyright (c) 2020-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nexport default View.extend({\n  className: 'hide resend-email-infobox',\n  template: hbs`\n      <div class=\"infobox infobox-warning\" aria-live=\"polite\">\n        <span class=\"icon warning-16\"></span>\n        <p>\n          <span>{{i18n code=\"email.code.not.received\" bundle=\"login\"}}</span>\n          <a href=\"#\" class=\"resend-email-btn\">\n          {{i18n code=\"email.button.resend\" bundle=\"login\"}}\n          </a>\n        </p>\n      </div>\n    `,\n\n  events: {\n    'click .resend-email-btn': 'resendEmail',\n  },\n\n  postRender: function() {\n    this.showResendCallout();\n  },\n\n  showResendCallout: function() {\n    _.delay(() => {\n      this.$el.removeClass('hide');\n    }, Enums.API_RATE_LIMIT);\n  },\n\n  hideResendCallout: function() {\n    this.$el.addClass('hide');\n  },\n\n  resendEmail: function(e) {\n    e.preventDefault();\n    this.hideResendCallout();\n    this.model.resend().finally(this.showResendCallout.bind(this));\n  },\n});\n","/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport ResendEmailView from 'v1/views/ResendEmailView';\nimport Footer from 'v1/views/enroll-factors/Footer';\n\nconst Model = {\n  props: {\n    passCode: 'string',\n  },\n\n  resend: function() {\n    this.trigger('form:clear-errors');\n    return this.doTransaction(function(transaction) {\n      // authn support multiple `resend` hence has to specify name.\n      return transaction.resend('email');\n    });\n  },\n\n  save: function() {\n    this.trigger('save');\n    const formData = this.toJSON();\n    return this.doTransaction(function(transaction) {\n      return transaction.activate(formData);\n    });\n  },\n};\n\nconst Form = function() {\n  return {\n    title: _.partial(loc, 'email.enroll.title', 'login'),\n    noButtonBar: false,\n    autoSave: true,\n    save: _.partial(loc, 'oform.verify', 'login'), // TODO: deprecated by mfa.challenge.verify\n    formChildren: [\n      // message\n      FormType.View({\n        View: View.extend({\n          className: 'enroll-activate-email-content',\n          attributes: {\n            'data-se': 'enroll-activate-email-content',\n          },\n\n          // Why use `{{{` for the description?\n          // - factorEmail is actually an HTML fragment which\n          //   is created via another handlebar template and used for bold the email address.\n          template: hbs('{{{i18n code=\"email.mfa.email.sent.description\" bundle=\"login\" arguments=\"factorEmail\"}}}'),\n\n          getTemplateData: function() {\n            const factor = this.options.appState.get('factor');\n            const factorEmailVal = factor && factor.profile ? factor.profile.email : '';\n            const factorEmail = hbs('<span class=\"mask-email\">{{email}}</span>')({ email: factorEmailVal });\n            return {\n              factorEmail,\n            };\n          },\n        }),\n      }),\n      // send again callout message and link button\n      FormType.View({\n        View: ResendEmailView,\n      }),\n      // passcode input\n      FormType.Input({\n        label: loc('email.code.label', 'login'),\n        'label-top': true,\n        name: 'passCode',\n        type: 'text',\n        wide: true,\n      }),\n    ],\n  };\n};\n\nexport default FormController.extend({\n  className: 'enroll-activate-email',\n\n  Model: Model,\n\n  Form: Form,\n\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n/* eslint max-len:0 */\n\nexport default {\n  US: '1',\n  AG: '1',\n  AI: '1',\n  AS: '1',\n  BB: '1',\n  BM: '1',\n  BS: '1',\n  CA: '1',\n  DM: '1',\n  DO: '1',\n  GD: '1',\n  GU: '1',\n  JM: '1',\n  KN: '1',\n  KY: '1',\n  LC: '1',\n  MP: '1',\n  MS: '1',\n  PR: '1',\n  SX: '1',\n  TC: '1',\n  TT: '1',\n  VC: '1',\n  VG: '1',\n  VI: '1',\n  RU: '7',\n  KZ: '7',\n  EG: '20',\n  ZA: '27',\n  GR: '30',\n  NL: '31',\n  BE: '32',\n  FR: '33',\n  ES: '34',\n  HU: '36',\n  IT: '39',\n  VA: '39',\n  RO: '40',\n  CH: '41',\n  AT: '43',\n  GB: '44',\n  GG: '44',\n  IM: '44',\n  JE: '44',\n  DK: '45',\n  SE: '46',\n  NO: '47',\n  SJ: '47',\n  PL: '48',\n  DE: '49',\n  PE: '51',\n  MX: '52',\n  CU: '53',\n  AR: '54',\n  BR: '55',\n  CL: '56',\n  CO: '57',\n  VE: '58',\n  MY: '60',\n  AU: '61',\n  CC: '61',\n  CX: '61',\n  ID: '62',\n  PH: '63',\n  NZ: '64',\n  SG: '65',\n  TH: '66',\n  JP: '81',\n  KR: '82',\n  VN: '84',\n  CN: '86',\n  TR: '90',\n  IN: '91',\n  PK: '92',\n  AF: '93',\n  LK: '94',\n  MM: '95',\n  IR: '98',\n  SS: '211',\n  MA: '212',\n  EH: '212',\n  DZ: '213',\n  TN: '216',\n  LY: '218',\n  GM: '220',\n  SN: '221',\n  MR: '222',\n  ML: '223',\n  GN: '224',\n  CI: '225',\n  BF: '226',\n  NE: '227',\n  TG: '228',\n  BJ: '229',\n  MU: '230',\n  LR: '231',\n  SL: '232',\n  GH: '233',\n  NG: '234',\n  TD: '235',\n  CF: '236',\n  CM: '237',\n  CV: '238',\n  ST: '239',\n  GQ: '240',\n  GA: '241',\n  CG: '242',\n  CD: '243',\n  AO: '244',\n  GW: '245',\n  IO: '246',\n  AC: '247',\n  SC: '248',\n  SD: '249',\n  RW: '250',\n  ET: '251',\n  SO: '252',\n  DJ: '253',\n  KE: '254',\n  TZ: '255',\n  UG: '256',\n  BI: '257',\n  MZ: '258',\n  ZM: '260',\n  MG: '261',\n  RE: '262',\n  YT: '262',\n  ZW: '263',\n  NA: '264',\n  MW: '265',\n  LS: '266',\n  BW: '267',\n  SZ: '268',\n  KM: '269',\n  SH: '290',\n  TA: '290',\n  ER: '291',\n  AW: '297',\n  FO: '298',\n  GL: '299',\n  GI: '350',\n  PT: '351',\n  LU: '352',\n  IE: '353',\n  IS: '354',\n  AL: '355',\n  MT: '356',\n  CY: '357',\n  FI: '358',\n  AX: '358',\n  BG: '359',\n  LT: '370',\n  LV: '371',\n  EE: '372',\n  MD: '373',\n  AM: '374',\n  BY: '375',\n  AD: '376',\n  MC: '377',\n  SM: '378',\n  UA: '380',\n  RS: '381',\n  ME: '382',\n  XK: '383',\n  HR: '385',\n  SI: '386',\n  BA: '387',\n  MK: '389',\n  CZ: '420',\n  SK: '421',\n  LI: '423',\n  FK: '500',\n  BZ: '501',\n  GT: '502',\n  SV: '503',\n  HN: '504',\n  NI: '505',\n  CR: '506',\n  PA: '507',\n  PM: '508',\n  HT: '509',\n  GP: '590',\n  BL: '590',\n  MF: '590',\n  BO: '591',\n  GY: '592',\n  EC: '593',\n  GF: '594',\n  PY: '595',\n  MQ: '596',\n  SR: '597',\n  UY: '598',\n  CW: '599',\n  BQ: '599',\n  TL: '670',\n  NF: '672',\n  BN: '673',\n  NR: '674',\n  PG: '675',\n  TO: '676',\n  SB: '677',\n  VU: '678',\n  FJ: '679',\n  PW: '680',\n  WF: '681',\n  CK: '682',\n  NU: '683',\n  WS: '685',\n  KI: '686',\n  NC: '687',\n  TV: '688',\n  PF: '689',\n  TK: '690',\n  FM: '691',\n  MH: '692',\n  '001': '979',\n  KP: '850',\n  HK: '852',\n  MO: '853',\n  KH: '855',\n  LA: '856',\n  BD: '880',\n  TW: '886',\n  MV: '960',\n  LB: '961',\n  JO: '962',\n  SY: '963',\n  IQ: '964',\n  KW: '965',\n  SA: '966',\n  YE: '967',\n  OM: '968',\n  PS: '970',\n  AE: '971',\n  IL: '972',\n  BH: '973',\n  QA: '974',\n  BT: '975',\n  MN: '976',\n  NP: '977',\n  TJ: '992',\n  TM: '993',\n  AZ: '994',\n  GE: '995',\n  KG: '996',\n  UZ: '998',\n  GS: '500',\n  PN: '64',\n  AQ: '672',\n  UM: '1',\n  AN: '599',\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport bundles from './Bundles';\nimport countryCallingCodes from './countryCallingCodes';\nconst fn = {};\n\n// () => [{ countryCode: countryName }], sorted by countryName\nfn.getCountries = function() {\n  const countries = _.omit(bundles.country, 'HM', 'BV', 'TF');\n  // HM, BV, and TF do not have phone prefixes, so don't give the\n  // user the option to choose these countries. FYI it appears that these\n  // countries do not have calling codes because they are ~~uninhabited~~\n\n  let collection = _.map(countries, function(name, code) {\n    return { name: name, code: code };\n  });\n\n  // Sort it; figure out if there is a better way to do this (best would\n  // be to sort it in the properties file!!)\n\n  collection = _.sortBy(collection, 'name');\n  const sorted = {};\n\n  _.each(collection, function(country) {\n    sorted[country.code] = country.name;\n  });\n\n  return sorted;\n};\n\nfn.getCountryCode = function(){\n\n  const countries = _.omit(bundles.country, 'HM', 'BV', 'TF');\n  // HM, BV, and TF do not have phone prefixes, so don't give the\n  // user the option to choose these countries. FYI it appears that these\n  // countries do not have calling codes because they are ~~uninhabited~~\n\n  let collection = _.map(countries, function(name, code) {\n    return { name: name, code: code };\n  });\n\n  collection = _.sortBy(collection, 'name');\n  const sorted = {};\n\n  _.each(collection, function(country) {\n    sorted[country.code] = loc('country.option.label', 'login', [country.name, country.code]);\n  });\n\n  return sorted;\n};\n\nfn.getCallingCodeForCountry = function(countryCode) {\n  return countryCallingCodes[countryCode];\n};\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Util from 'util/Util';\n\nlet { TextBox } = internal.views.forms.inputs;\nexport default TextBox.extend({\n  template: hbs(\n    '\\\n      <span class=\"okta-form-label-inline o-form-label-inline\">{{countryCallingCode}}</span>\\\n      <span class=\"okta-form-input-field input-fix o-form-control\">\\\n        <input type=\"{{type}}\" placeholder=\"{{placeholder}}\" name=\"{{name}}\" \\\n          id=\"{{inputId}}\" value=\"{{value}}\" autocomplete=\"{{autocomplete}}\">\\\n      </span>\\\n    '\n  ),\n\n  initialize: function() {\n    this.listenTo(this.model, 'change:countryCallingCode', function() {\n      this.$('.o-form-label-inline').text(this.model.get('countryCallingCode'));\n    });\n  },\n\n  preRender: function() {\n    this.options.countryCallingCode = this.model.get('countryCallingCode');\n    this.options.autocomplete = Util.getAutocompleteValue(this.options.model.settings, 'tel');\n  },\n\n  postRender: function() {\n    // This is a hack - once inputGroups are done, get rid of it!!\n    this.$el.removeClass('input-fix o-form-control');\n    _.defer(() => {\n      this.$el.parent().addClass('o-form-input-group');\n    });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 8] */\nimport { _, loc, internal, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport CountryUtil from 'util/CountryUtil';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport PhoneTextBox from 'v1/views/enroll-factors/PhoneTextBox';\nimport TextBox from 'v1/views/shared/TextBox';\nlet { Keys } = internal.util;\nconst EnrollCallAndSmsControllerwarningTemplate = View.extend({\n  className: 'okta-form-infobox-warning infobox infobox-warning login-timeout-warning',\n  attributes: {\n    'aria-live': 'polite',\n  },\n  template: hbs`\n      <span class=\"icon warning-16\"></span>\n      <p>{{{warning}}}</p>\n    `,\n});\nconst factorIdIsDefined = {\n  factorId: function(val) {\n    return !_.isUndefined(val);\n  },\n};\n\nfunction isCallFactor(factorType) {\n  return factorType === 'call';\n}\n\nfunction getClassName(factorType) {\n  return isCallFactor(factorType) ? 'enroll-call' : 'enroll-sms';\n}\n\nfunction sendCode(e) {\n  if (Keys.isEnter(e)) {\n    e.stopPropagation();\n    e.preventDefault();\n    if (e.type === 'keyup' && e.data && e.data.model) {\n      e.data.model.sendCode();\n    }\n  }\n}\n\nexport default FormController.extend({\n  className: function() {\n    return getClassName(this.options.factorType);\n  },\n  Model: function() {\n    return {\n      props: {\n        phoneNumber: ['string', true],\n        phoneExtension: ['string', false],\n        lastEnrolledPhoneNumber: 'string',\n        passCode: ['string', true],\n        factorId: 'string',\n      },\n      local: {\n        countryCode: ['string', false, this.options.appState.get('userCountryCode')],\n        hasExistingPhones: 'boolean',\n        trapEnrollment: 'boolean',\n        ableToResend: 'boolean',\n        factorType: 'string',\n        skipPhoneValidation: 'boolean',\n      },\n      derived: {\n        countryCallingCode: {\n          deps: ['countryCode'],\n          fn: function(countryCode) {\n            return '+' + CountryUtil.getCallingCodeForCountry(countryCode);\n          },\n        },\n        fullPhoneNumber: {\n          deps: ['countryCallingCode', 'phoneNumber'],\n          fn: function(countryCallingCode, phoneNumber) {\n            return phoneNumber ? countryCallingCode + phoneNumber : '';\n          },\n        },\n        enrolled: {\n          deps: ['lastEnrolledPhoneNumber', 'fullPhoneNumber'],\n          fn: function(lastEnrolled, current) {\n            return lastEnrolled === current;\n          },\n        },\n      },\n      limitResending: function() {\n        this.set({ ableToResend: false });\n        _.delay(_.bind(this.set, this), Enums.API_RATE_LIMIT, { ableToResend: true });\n      },\n      sendCode: function() {\n        const self = this;\n        const phoneNumber = this.get('fullPhoneNumber');\n        const phoneExtension = this.get('phoneExtension');\n  \n        self.trigger('errors:clear');\n  \n        if (!phoneNumber.length) {\n          self.trigger('invalid', self, { phoneNumber: 'model.validation.field.blank' });\n          return;\n        }\n  \n        return this.doTransaction(function(transaction) {\n          const isMfaEnroll = transaction.status === 'MFA_ENROLL' || transaction.status === 'FACTOR_ENROLL';\n          const profileData = {\n            phoneNumber: phoneNumber,\n            updatePhone: isMfaEnroll ? self.get('hasExistingPhones') : true,\n          };\n  \n          if (isCallFactor(self.get('factorType'))) {\n            profileData['phoneExtension'] = phoneExtension;\n          }\n  \n          if (self.get('skipPhoneValidation')) {\n            profileData['validatePhone'] = false;\n          }\n  \n          const doEnroll = function(trans) {\n            const factor = _.findWhere(trans.factors, {\n              factorType: self.get('factorType'),\n              provider: 'OKTA',\n            });\n  \n            return factor\n              .enroll({\n                profile: profileData,\n              })\n              .catch(function(error) {\n                if (error.errorCode === 'E0000098') {\n                  // E0000098: \"This phone number is invalid.\"\n                  self.set('skipPhoneValidation', true);\n                  error.xhr.responseJSON.errorSummary = loc('enroll.sms.try_again', 'login');\n                }\n                throw error;\n              });\n          };\n  \n          if (isMfaEnroll) {\n            return doEnroll(transaction);\n          } else {\n            // We must transition to MfaEnroll before updating the phone number\n            self.set('trapEnrollment', true);\n            return transaction.prev().then(doEnroll).then(function(trans) {\n              self.set('trapEnrollment', false);\n              return trans;\n            });\n          }\n          // Rethrow errors so we can change state\n          // AFTER setting the new transaction\n        }, true)\n          .then(function() {\n            self.set('lastEnrolledPhoneNumber', phoneNumber);\n            self.limitResending();\n          })\n          .catch(function() {\n            self.set('trapEnrollment', false);\n          });\n      },\n      resendCode: function() {\n        this.trigger('errors:clear');\n        this.limitResending();\n        return this.doTransaction(function(transaction) {\n          return transaction.resend(this.get('factorType'));\n        });\n      },\n      save: function() {\n        return this.doTransaction(function(transaction) {\n          return transaction.activate({\n            passCode: this.get('passCode'),\n          });\n        });\n      },\n    };\n  },\n  Form: function() {\n    const factorType = this.options.factorType;\n    const isCall = isCallFactor(factorType);\n    const formTitle = loc(isCall ? 'enroll.call.setup' : 'enroll.sms.setup', 'login');\n    const formSubmit = loc(isCall ? 'mfa.call' : 'mfa.sendCode', 'login');\n    const formRetry = loc(isCall ? 'mfa.redial' : 'mfa.resendCode', 'login');\n    const formSubmitted = loc(isCall ? 'mfa.calling' : 'mfa.sent', 'login');\n    const numberFieldClassName = isCall ? 'enroll-call-phone' : 'enroll-sms-phone';\n    const buttonClassName = isCall ? 'call-request-button' : 'sms-request-button';\n    const formChildren = [\n      FormType.Input({\n        name: 'countryCode',\n        type: 'select',\n        wide: true,\n        options: CountryUtil.getCountries(),\n      }),\n      FormType.Input({\n        label: loc('mfa.phoneNumber.placeholder', 'login'),\n        'label-top': true,\n        className: numberFieldClassName,\n        name: 'phoneNumber',\n        input: PhoneTextBox,\n        type: 'text',\n        render: function() {\n          this.$('input[name=\"phoneNumber\"]')\n            .off('keydown keyup', sendCode)\n            .keydown(sendCode)\n            .keyup({ model: this.model }, sendCode);\n        },\n      }),\n    ];\n\n    if (isCall) {\n      formChildren.push(\n        FormType.Input({\n          label: loc('mfa.phoneNumber.ext.placeholder', 'login'),\n          'label-top': true,\n          className: 'enroll-call-extension',\n          name: 'phoneExtension',\n          input: TextBox,\n          type: 'text',\n        })\n      );\n    }\n    formChildren.push(\n      FormType.Button({\n        title: formSubmit,\n        attributes: { 'data-se': buttonClassName },\n        className: 'button button-primary js-enroll-phone margin-top-30 ' + buttonClassName,\n        click: function() {\n          this.model.sendCode();\n        },\n      }),\n      FormType.Button({\n        title: formRetry,\n        attributes: { 'data-se': buttonClassName },\n        className: 'button js-enroll-phone margin-top-30 ' + buttonClassName,\n        click: function() {\n          this.model.resendCode();\n        },\n        initialize: function() {\n          this.$el.css({ display: 'none' });\n          this.listenTo(this.model, 'change:ableToResend', function(model, ableToResend) {\n            if (ableToResend) {\n              this.options.title = formRetry;\n              this.enable();\n            } else {\n              this.options.title = formSubmitted;\n              this.disable();\n            }\n            this.render();\n          });\n        },\n      }),\n      FormType.Divider({\n        showWhen: factorIdIsDefined,\n      }),\n      FormType.Input({\n        label: loc('mfa.challenge.enterCode.placeholder', 'login'),\n        'label-top': true,\n        explain: Util.createInputExplain(\n          'mfa.challenge.enterCode.tooltip',\n          'mfa.challenge.enterCode.placeholder',\n          'login'\n        ),\n        'explain-top': true,\n        name: 'passCode',\n        input: TextBox,\n        type: 'tel',\n        showWhen: factorIdIsDefined,\n      }),\n      FormType.Toolbar({\n        noCancelButton: true,\n        save: loc('mfa.challenge.verify', 'login'),\n        showWhen: factorIdIsDefined,\n      })\n    );\n\n    return {\n      title: formTitle,\n      noButtonBar: true,\n      autoSave: true,\n      className: getClassName(factorType),\n\n      showWarning: function(msg) {\n        this.clearWarnings();\n        this.add(EnrollCallAndSmsControllerwarningTemplate, '.o-form-error-container', { options: { warning: msg } });\n      },\n\n      clearWarnings: function() {\n        this.$('.okta-form-infobox-warning').remove();\n      },\n\n      initialize: function() {\n        const callTimeWarning = hbs`{{i18n\n          code=\"factor.call.time.warning\"\n          bundle=\"login\"\n          $1=\"<b>$1</b>\"\n        }}`;\n        const smsTimeWarning = hbs`{{i18n\n          code=\"factor.sms.time.warning\"\n          bundle=\"login\"\n          $1=\"<b>$1</b>\"\n        }}`;\n        this.listenTo(this.model, 'change:ableToResend', function(model, ableToResend) {\n          if (ableToResend) {\n            this.showWarning(isCall ? callTimeWarning : smsTimeWarning);\n          } else {\n            this.clearWarnings();\n          }\n        });\n        this.listenTo(this.model, 'error errors:clear', function() {\n          this.clearWarnings();\n          this.clearErrors();\n        });\n        this.listenTo(this.model, 'change:enrolled', function() {\n          this.$('.js-enroll-phone').toggle();\n        });\n      },\n      formChildren: formChildren,\n    };\n  },\n\n  Footer: Footer,\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate')) {\n      this.model.set('factorId', this.options.appState.get('activatedFactorId'));\n      return true;\n    }\n    if (this.options.appState.get('isMfaEnroll') && this.model.get('trapEnrollment')) {\n      return true;\n    }\n  },\n\n  initialize: function() {\n    if (isCallFactor(this.options.factorType)) {\n      this.model.set('hasExistingPhones', this.options.appState.get('hasExistingPhonesForCall'));\n    } else {\n      this.model.set('hasExistingPhones', this.options.appState.get('hasExistingPhones'));\n    }\n    this.model.set('factorType', this.options.factorType);\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, ListView, View, createButton, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FactorUtil from 'util/FactorUtil';\nimport RouterUtil from 'v1/util/RouterUtil';\nconst cardinalityTextTpl = hbs('<span class=\"factor-cardinality\">{{cardinalityText}}</span>');\nconst FactorListFactorRow = View.extend({\n  tagName: 'li',\n\n  className: 'enroll-factor-row clearfix',\n\n  template: hbs(\n    '\\\n      <div class=\"enroll-factor-icon-container\">\\\n        <div class=\"factor-icon enroll-factor-icon {{iconClassName}}\">\\\n        </div>\\\n      </div>\\\n      <div class=\"enroll-factor-description\">\\\n        <h3 class=\"enroll-factor-label\">{{factorLabel}}</h3>\\\n        {{#if factorDescription}}\\\n          <p>{{factorDescription}}</p>\\\n        {{/if}}\\\n        <div class=\"enroll-factor-button\"></div>\\\n      </div>\\\n    '\n  ),\n\n  attributes: function() {\n    return { 'data-se': this.model.get('factorName') };\n  },\n\n  children: function() {\n    const children = [];\n    const enrolled = this.model.get('enrolled');\n    const required = this.model.get('required');\n    const cardinality = this.model.get('cardinality');\n\n    if (this.options.showInlineSetupButton) {\n      return [\n        [\n          createButton({\n            className: 'button',\n            title: this.getSetupButtonText(),\n            click: function() {\n              this.options.appState.trigger(\n                'navigate',\n                RouterUtil.createEnrollFactorUrl(this.model.get('provider'), this.model.get('factorType'))\n              );\n            },\n          }),\n          '.enroll-factor-button',\n        ],\n      ];\n    } else if (enrolled) {\n      children.push(['<span class=\"icon success-16-green\"></span>', '.enroll-factor-label']);\n    } else if (required) {\n      children.push(['<span class=\"icon success-16-gray\"></span>', '.enroll-factor-label']);\n    }\n\n    const cardinalityText = FactorUtil.getCardinalityText(enrolled, required, cardinality);\n\n    if (cardinalityText) {\n      children.push([cardinalityTextTpl({ cardinalityText: cardinalityText }), '.enroll-factor-description']);\n    }\n    return children;\n  },\n\n  minimize: function() {\n    this.$el.addClass('enroll-factor-row-min');\n  },\n\n  maximize: function() {\n    this.$el.removeClass('enroll-factor-row-min');\n  },\n\n  getSetupButtonText: function() {\n    return this.model.get('additionalEnrollment')\n      ? loc('enroll.choices.setup.another', 'login')\n      : loc('enroll.choices.setup', 'login');\n  },\n});\nexport default ListView.extend({\n  className: 'enroll-factor-list',\n\n  item: FactorListFactorRow,\n\n  itemSelector: '.list-content',\n\n  template: hbs(\n    '\\\n      {{#if listTitle}}\\\n        <h3 class=\"list-title\">{{listTitle}}</h3>\\\n      {{/if}}\\\n      <ul class=\"list-content\"></ul>\\\n    '\n  ),\n\n  getTemplateData: function() {\n    const json = ListView.prototype.getTemplateData.call(this);\n\n    _.extend(json, this);\n    return json;\n  },\n\n  postRender: function() {\n    if (this.options.minimize) {\n      this.invoke('minimize');\n    }\n  },\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nexport default View.extend({\n  template: hbs`\n      <a href=\"#\" class=\"link goto js-skip\" data-se=\"skip-link\">\n        {{i18n code=\"enroll.choices.setup.skip\" bundle=\"login\"}}\n      </a>\n    `,\n  className: 'auth-footer clearfix',\n  events: {\n    'click .js-skip': function(e) {\n      e.preventDefault();\n      this.model.doTransaction(function(transaction) {\n        return transaction.skip();\n      });\n    },\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FactorList from './FactorList';\nexport default FactorList.extend({\n  listTitle: _.partial(loc, 'enroll.choices.list.setup', 'login'),\n\n  className: function() {\n    return FactorList.prototype.className + ' enroll-required-factor-list';\n  },\n\n  postRender: function() {\n    let currentModel;\n    let currentRow;\n\n    FactorList.prototype.postRender.apply(this, arguments);\n    currentModel = this.options.appState.get('factors').getFirstUnenrolledRequiredFactor();\n    currentRow = this.find(function(view) {\n      return view.model === currentModel;\n    });\n    currentRow.maximize();\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 13] */\n\nimport { _, loc, Collection } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FactorList from 'v1/views/enroll-choices/FactorList';\nimport Footer from 'v1/views/enroll-choices/Footer';\nimport RequiredFactorList from 'v1/views/enroll-choices/RequiredFactorList';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport RouterUtil from 'v1/util/RouterUtil';\nconst subtitleTpl = hbs('<span>{{{subtitle}}}</span>');\nexport default FormController.extend({\n  className: 'enroll-choices',\n  state: {\n    pageType: null,\n  },\n\n  Model: {},\n\n  Form: {\n    noCancelButton: true,\n\n    title: _.partial(loc, 'enroll.choices.title', 'login'),\n\n    noButtonBar: function() {\n      return this.state.get('pageType') === Enums.ALL_OPTIONAL_NONE_ENROLLED;\n    },\n\n    subtitle: ' ',\n\n    getSubtitle: function() {\n      switch (this.state.get('pageType')) {\n      case Enums.ALL_OPTIONAL_SOME_ENROLLED:\n      case Enums.HAS_REQUIRED_ALL_REQUIRED_ENROLLED:\n        return loc('enroll.choices.optional', 'login');\n      case Enums.HAS_REQUIRED_SOME_REQUIRED_ENROLLED: {\n        const remainingDays = this.options.appState.get('gracePeriodRemainingDays');\n\n        // remainingDays is null if there is no grace period, 0 if we are still in grace period\n        return (remainingDays !== null && remainingDays >= 0)\n          ? this.getGracePeriodSubtitle(remainingDays)\n          : this.getDefaultSubtitle();\n      }\n      default:\n        return this.getDefaultSubtitle();\n      }\n    },\n\n    getDefaultSubtitle: function() {\n      return this.settings.get('brandName')\n        ? loc('enroll.choices.description.specific', 'login', [this.settings.get('brandName')])\n        : loc('enroll.choices.description.generic', 'login');\n    },\n\n    getGracePeriodSubtitle: function(remainingDays) {\n      return remainingDays >= 1\n        ? loc('enroll.choices.description.gracePeriod.bold', 'login', [remainingDays])\n        : loc('enroll.choices.description.gracePeriod.oneDay.bold', 'login');\n    },\n\n    save: function() {\n      switch (this.state.get('pageType')) {\n      case Enums.ALL_OPTIONAL_SOME_ENROLLED:\n      case Enums.HAS_REQUIRED_ALL_REQUIRED_ENROLLED:\n        return loc('enroll.choices.submit.finish', 'login');\n      case Enums.HAS_REQUIRED_NONE_ENROLLED:\n        return loc('enroll.choices.submit.configure', 'login');\n      case Enums.HAS_REQUIRED_SOME_REQUIRED_ENROLLED:\n        return loc('enroll.choices.submit.next', 'login');\n      default:\n        return '';\n      }\n    },\n\n    initialize: function(options) {\n      this.listenTo(this, 'save', function() {\n        let current;\n\n        switch (this.state.get('pageType')) {\n        case Enums.HAS_REQUIRED_NONE_ENROLLED:\n        case Enums.HAS_REQUIRED_SOME_REQUIRED_ENROLLED:\n          current = options.appState.get('factors').getFirstUnenrolledRequiredFactor();\n          options.appState.trigger(\n            'navigate',\n            RouterUtil.createEnrollFactorUrl(current.get('provider'), current.get('factorType'))\n          );\n          break;\n        default:\n          return this.model.doTransaction(function(transaction) {\n            return transaction.skip();\n          });\n        }\n      });\n    },\n\n    preRender: function() {\n      // form subtitle does not support unescaped strings, and we need some html elements\n      // in the subtitle for this form. So instead of a regular subtitle, we add a <span>\n      // with the text we need\n      this.add(subtitleTpl({ subtitle: this.getSubtitle() }), 'p.okta-form-subtitle');\n\n      const factors = this.options.appState.get('factors');\n\n      switch (this.state.get('pageType')) {\n      case Enums.HAS_REQUIRED_NONE_ENROLLED:\n      case Enums.HAS_REQUIRED_SOME_REQUIRED_ENROLLED:\n        this.add(\n          new RequiredFactorList({\n            minimize: true,\n            collection: new Collection(factors.where({ required: true })),\n            appState: this.options.appState,\n          })\n        );\n        break;\n      case Enums.HAS_REQUIRED_ALL_REQUIRED_ENROLLED:\n      case Enums.ALL_OPTIONAL_SOME_ENROLLED:\n      case Enums.ALL_OPTIONAL_NONE_ENROLLED: {\n        const enrolled = factors.where({ enrolled: true });\n        const notEnrolled = factors.filter(function(factor) {\n          // pick factors that are not enrolled or have additional enrollments\n          return !factor.get('enrolled') || factor.get('additionalEnrollment');\n        });\n        let notEnrolledListTitle;\n\n        if (enrolled.length > 0) {\n          notEnrolledListTitle = loc('enroll.choices.list.optional', 'login');\n          this.add(\n            new FactorList({\n              listTitle: loc('enroll.choices.list.enrolled', 'login'),\n              minimize: true,\n              collection: new Collection(enrolled),\n              appState: this.options.appState,\n            })\n          );\n        }\n        this.add(\n          new FactorList({\n            listTitle: notEnrolledListTitle,\n            collection: new Collection(notEnrolled),\n            appState: this.options.appState,\n            showInlineSetupButton: true,\n          })\n        );\n        break;\n      }\n      }\n    },\n  },\n\n  initialize: function(options) {\n    let numRequiredEnrolled = 0;\n    let numRequiredNotEnrolled = 0;\n    let numOptionalEnrolled = 0;\n    let numOptionalNotEnrolled = 0;\n    let hasRequired;\n    let pageType;\n\n    options.appState.get('factors').each(function(factor) {\n      const required = factor.get('required');\n      const enrolled = factor.get('enrolled');\n      const additionalEnrollment = factor.get('additionalEnrollment');\n\n      if (required && enrolled) {\n        numRequiredEnrolled++;\n      } else if (required && !enrolled) {\n        numRequiredNotEnrolled++;\n      } else if (!required && enrolled) {\n        numOptionalEnrolled++;\n      } else if (!required && !enrolled) {\n        numOptionalNotEnrolled++;\n      }\n      // If a factor has multiple instances and\n      // additional optional enrollments\n      if (enrolled && additionalEnrollment) {\n        numOptionalNotEnrolled++;\n      }\n    });\n\n    hasRequired = numRequiredEnrolled > 0 || numRequiredNotEnrolled > 0;\n\n    // There are 5 possible states this screen can be in:\n\n    // 1. Has required, but none have been enrolled. Wizard start page.\n    if (hasRequired && numRequiredEnrolled === 0) {\n      pageType = Enums.HAS_REQUIRED_NONE_ENROLLED;\n    } else if (hasRequired && numRequiredNotEnrolled > 0) {\n      // 2. Has required, and have enrolled at least one. The page layout\n      //    to configure the remaining required factors.\n      pageType = Enums.HAS_REQUIRED_SOME_REQUIRED_ENROLLED;\n    } else if (hasRequired && numOptionalNotEnrolled > 0) {\n      // 3. Has required, and finished enrolling all required factors. The\n      //    page layout you see to configure any optional factors or skip.\n      pageType = Enums.HAS_REQUIRED_ALL_REQUIRED_ENROLLED;\n    } else if (numOptionalEnrolled === 0 && numOptionalNotEnrolled > 0) {\n      // 4. Factors are all optional, no factors enrolled.\n      pageType = Enums.ALL_OPTIONAL_NONE_ENROLLED;\n    } else if (numOptionalNotEnrolled > 0) {\n      // 5. Factors are all optional, some factors have already been\n      //    enrolled (can either enroll more or skip).\n      pageType = Enums.ALL_OPTIONAL_SOME_ENROLLED;\n    } else {\n      // 6. Factors are all optional, all factors have already been\n      //    enrolled, among them there is OktaVerify with Push enrolled as totp\n      //    (API return OktaVerify push factor as unenrolled in this case and as we always merge\n      //    push and totp in UI so we redirect to skip link here).\n      this.model.doTransaction(function(transaction) {\n        return transaction.skip();\n      });\n    }\n\n    this.state.set('pageType', pageType);\n\n    if (this.options.appState.get('skipLink') && pageType === Enums.HAS_REQUIRED_SOME_REQUIRED_ENROLLED) {\n      this.add(new Footer(this.toJSON()));\n    }\n  },\n});\n","/**\n * \n * This file has been modified to override doPostBack\n * Check out the doPostBack function below for more details.\n * Override the doPostBack function when upgrading.\n * Unable to make a wrapper because it is invoked using an internal name within \n * this library.\n * \n * Current Verison = https://github.com/duosecurity/duo_web_sdk/blob/7aec8dd895ea4bd4549069e76076850eccfe07f2/index.js\n * PS: they dont seem to version correctly hence using commit.\n */\n\n/**\n * Duo Web SDK v2\n * Copyright 2019, Duo Security\n */\n\n// Modified to remove AMD and support ESM transform - OKTA-369648\n(function (root, factory) {\n    module.exports = factory();\n}(this, function() {\n    var DUO_MESSAGE_FORMAT = /^(?:AUTH|ENROLL)+\\|[A-Za-z0-9\\+\\/=]+\\|[A-Za-z0-9\\+\\/=]+$/;\n    var DUO_ERROR_FORMAT = /^ERR\\|[\\w\\s\\.\\(\\)]+$/;\n    var DUO_OPEN_WINDOW_FORMAT = /^DUO_OPEN_WINDOW\\|/;\n    var VALID_OPEN_WINDOW_DOMAINS = [\n        'duo.com',\n        'duosecurity.com',\n        'duomobile.s3-us-west-1.amazonaws.com'\n    ];\n\n    var postAction,\n        postArgument,\n        host,\n        sigRequest,\n        duoSig,\n        appSig,\n        iframe,\n        submitCallback;\n\n    // We use this function instead of setting initial values in the var\n    // declarations to make sure the initial values and subsequent\n    // re-initializations are always the same.\n    initializeStatefulVariables();\n\n    /**\n     * Set local variables to whatever they should be before you call init().\n     */\n    function initializeStatefulVariables() {\n        postAction = '';\n        postArgument = 'sig_response';\n        host = undefined;\n        sigRequest = undefined;\n        duoSig = undefined;\n        appSig = undefined;\n        iframe = undefined;\n        submitCallback = undefined;\n    }\n\n    function throwError(message, givenUrl) {\n        var url = (\n            givenUrl ||\n            'https://www.duosecurity.com/docs/duoweb#3.-show-the-iframe'\n        );\n        throw new Error(\n            'Duo Web SDK error: ' + message +\n            (url ? ('\\n' + 'See ' + url + ' for more information') : '')\n        );\n    }\n\n    function hyphenize(str) {\n        return str.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase();\n    }\n\n    // cross-browser data attributes\n    function getDataAttribute(element, name) {\n        if ('dataset' in element) {\n            return element.dataset[name];\n        } else {\n            return element.getAttribute('data-' + hyphenize(name));\n        }\n    }\n\n    // cross-browser event binding/unbinding\n    function on(context, event, fallbackEvent, callback) {\n        if ('addEventListener' in window) {\n            context.addEventListener(event, callback, false);\n        } else {\n            context.attachEvent(fallbackEvent, callback);\n        }\n    }\n\n    function off(context, event, fallbackEvent, callback) {\n        if ('removeEventListener' in window) {\n            context.removeEventListener(event, callback, false);\n        } else {\n            context.detachEvent(fallbackEvent, callback);\n        }\n    }\n\n    function onReady(callback) {\n        on(document, 'DOMContentLoaded', 'onreadystatechange', callback);\n    }\n\n    function offReady(callback) {\n        off(document, 'DOMContentLoaded', 'onreadystatechange', callback);\n    }\n\n    function onMessage(callback) {\n        on(window, 'message', 'onmessage', callback);\n    }\n\n    function offMessage(callback) {\n        off(window, 'message', 'onmessage', callback);\n    }\n\n    /**\n     * Parse the sig_request parameter, throwing errors if the token contains\n     * a server error or if the token is invalid.\n     *\n     * @param {String} sig Request token\n     */\n    function parseSigRequest(sig) {\n        if (!sig) {\n            // nothing to do\n            return;\n        }\n\n        // see if the token contains an error, throwing it if it does\n        if (sig.indexOf('ERR|') === 0) {\n            throwError(sig.split('|')[1]);\n        }\n\n        // validate the token\n        if (sig.indexOf(':') === -1 || sig.split(':').length !== 2) {\n            throwError(\n                'Duo was given a bad token.  This might indicate a configuration ' +\n                'problem with one of Duo\\'s client libraries.'\n            );\n        }\n\n        var sigParts = sig.split(':');\n\n        // hang on to the token, and the parsed duo and app sigs\n        sigRequest = sig;\n        duoSig = sigParts[0];\n        appSig = sigParts[1];\n\n        return {\n            sigRequest: sig,\n            duoSig: sigParts[0],\n            appSig: sigParts[1]\n        };\n    }\n\n    /**\n     * Validate that a MessageEvent came from the Duo service, and that it\n     * is a properly formatted payload.\n     *\n     * The Google Chrome sign-in page injects some JS into pages that also\n     * make use of postMessage, so we need to do additional validation above\n     * and beyond the origin.\n     *\n     * @param {MessageEvent} event Message received via postMessage\n     */\n    function isDuoMessage(event) {\n        return Boolean(\n            event.origin === ('https://' + host) &&\n            typeof event.data === 'string' &&\n            (\n                event.data.match(DUO_MESSAGE_FORMAT) ||\n                event.data.match(DUO_ERROR_FORMAT) ||\n                event.data.match(DUO_OPEN_WINDOW_FORMAT)\n            )\n        );\n    }\n\n    /**\n     * Validate the request token and prepare for the iframe to become ready.\n     *\n     * All options below can be passed into an options hash to `Duo.init`, or\n     * specified on the iframe using `data-` attributes.\n     *\n     * Options specified using the options hash will take precedence over\n     * `data-` attributes.\n     *\n     * Example using options hash:\n     * ```javascript\n     * Duo.init({\n     *     iframe: \"some_other_id\",\n     *     host: \"api-main.duo.test\",\n     *     sig_request: \"...\",\n     *     post_action: \"/auth\",\n     *     post_argument: \"resp\"\n     * });\n     * ```\n     *\n     * Example using `data-` attributes:\n     * ```html\n     * <iframe id=\"duo_iframe\"\n     *         data-host=\"api-main.duo.test\"\n     *         data-sig-request=\"...\"\n     *         data-post-action=\"/auth\"\n     *         data-post-argument=\"resp\"\n     *         >\n     * </iframe>\n     * ```\n     *\n     * Some browsers (especially embedded browsers) don't like it when the Duo\n     * Web SDK changes the `src` attribute on the iframe. To prevent this, there\n     * is an alternative way to use the Duo Web SDK:\n     *\n     * Add a div (or any other container element) instead of an iframe to the\n     * DOM with an id of \"duo_iframe\", or pass that element to the\n     * `iframeContainer` parameter of `Duo.init`. An iframe will be created and\n     * inserted into that container element, preventing `src` change related\n     * bugs. WARNING: All other elements in the container will be deleted.\n     *\n     * The `iframeAttributes` parameter of `Duo.init` is available to set any\n     * attributes on the inserted iframe if the Duo Web SDK is inserting the\n     * iframe. For details, see the parameter documentation below.\n     *\n     * @param {Object} options\n     * @param {String} options.host - Hostname for the Duo Prompt.\n     * @param {String} options.sig_request - Request token.\n     * @param {String|HTMLElement} [options.iframe] - The iframe, or id of an\n     *     iframe that will be used for the Duo Prompt. If you don't provide\n     *     this or the `iframeContainer` parameter the Duo Web SDK will default\n     *     to using whatever element has an id of \"duo_iframe\".\n     * @param {String|HTMLElement} [options.iframeContainer] - The element you\n     *     want the Duo Prompt inserted into, or the id of that element.\n     *     Anything inside this element will be deleted and replaced with an\n     *     iframe hosting the Duo prompt. If you don't provide this or the\n     *     `iframe` parameter the Duo Web SDK will default to using whatever\n     *     element has an id of \"duo_iframe\".\n     * @param {Object} [options.iframeAttributes] - Object with  names and\n     *     values coresponding to attributes you want added to the  Duo Prompt\n     *     iframe, like `title`, `width` and `allow`. WARNING: this parameter\n     *     only works if you use the `iframeContainer` parameter or add an id\n     *     of \"duo_iframe\" to an element that isn't an iframe. If you have\n     *     added an iframe to the DOM yourself, you should set those attributes\n     *     directly on the iframe.\n     * @param {String} [options.post_action=''] - URL to POST back to after a\n     *     successful auth.\n     * @param {String} [options.post_argument='sig_response'] - Parameter name\n     *     to use for response token.\n     * @param {Function} [options.submit_callback] - If provided, the Duo Web\n     *     SDK will not submit the form. Instead it will execute this callback\n     *     function passing in a reference to the \"duo_form\" form object.\n     *     `submit_callback`` can be used to prevent the webpage from reloading.\n     */\n    function init(options) {\n        // If init() is called more than once we have to reset all the local\n        // variables to ensure init() will work the same way every time. This\n        // helps people making single page applications. SPAs may periodically\n        // remove the iframe and add a new one that has to be initialized.\n        initializeStatefulVariables();\n\n        if (options) {\n            if (options.host) {\n                host = options.host;\n            }\n\n            if (options.sig_request) {\n                parseSigRequest(options.sig_request);\n            }\n\n            if (options.post_action) {\n                postAction = options.post_action;\n            }\n\n            if (options.post_argument) {\n                postArgument = options.post_argument;\n            }\n\n            if (typeof options.submit_callback === 'function') {\n                submitCallback = options.submit_callback;\n            }\n        }\n\n        var promptElement = getPromptElement(options);\n        if (promptElement) {\n            // If we can get the element that will host the prompt, set it.\n            ready(promptElement, options.iframeAttributes || {});\n        } else {\n            // If the element that will host the prompt isn't available yet, set\n            // it up after the DOM finishes loading.\n            asyncReady(options);\n        }\n\n        // always clean up after yourself!\n        offReady(init);\n    }\n\n    /**\n     * Given the options from init(), get the iframe or iframe container that\n     * should be used for the Duo Prompt. Returns `null` if nothing was found.\n     */\n    function getPromptElement(options) {\n        var result;\n\n        if (options.iframe && options.iframeContainer) {\n            throwError(\n                'Passing both `iframe` and `iframeContainer` arguments at the' +\n                ' same time is not allowed.'\n            );\n        } else if (options.iframe) {\n            // If we are getting an iframe, try to get it and raise if the\n            // element we find is NOT an iframe.\n            result = getUserDefinedElement(options.iframe);\n            validateIframe(result);\n        } else if (options.iframeContainer) {\n            result = getUserDefinedElement(options.iframeContainer);\n            validateIframeContainer(result);\n        } else {\n            result = document.getElementById('duo_iframe');\n        }\n\n        return result;\n    }\n\n    /**\n     * When given an HTMLElement, return it. When given a string, get an element\n     * with that id, else return null.\n     */\n    function getUserDefinedElement(object) {\n        if (object.tagName) {\n            return object;\n        } else if (typeof object == 'string') {\n            return document.getElementById(object);\n        }\n        return null;\n    }\n\n    /**\n     * Check if the given thing is an iframe.\n     */\n    function isIframe(element) {\n        return (\n            element &&\n            element.tagName &&\n            element.tagName.toLowerCase() === 'iframe'\n        );\n    }\n\n    /**\n     * Throw an error if we are given an element that is NOT an iframe.\n     */\n    function validateIframe(element) {\n        if (element && !isIframe(element)) {\n            throwError(\n                '`iframe` only accepts an iframe element or the id of an' +\n                ' iframe. To use a non-iframe element, use the' +\n                ' `iframeContainer` argument.'\n            );\n        }\n    }\n\n    /**\n     * Throw an error if we are given an element that IS an iframe instead of an\n     * element that we can insert an iframe into.\n     */\n    function validateIframeContainer(element) {\n        if (element && isIframe(element)) {\n            throwError(\n                '`iframeContainer` only accepts a non-iframe element or the' +\n                ' id of a non-iframe. To use a non-iframe element, use the' +\n                ' `iframeContainer` argument on Duo.init().'\n            );\n        }\n    }\n\n    /**\n     * Generate the URL that goes to the Duo Prompt.\n     */\n    function generateIframeSrc() {\n        return [\n            'https://', host, '/frame/web/v1/auth?tx=', duoSig,\n            '&parent=', encodeURIComponent(document.location.href),\n            '&v=2.8'\n        ].join('');\n    }\n\n    /**\n     * This function is called when a message was received from another domain\n     * using the `postMessage` API.  Check that the event came from the Duo\n     * service domain, and that the message is a properly formatted payload,\n     * then perform the post back to the primary service.\n     *\n     * @param event Event object (contains origin and data)\n     */\n    function onReceivedMessage(event) {\n        if (isDuoMessage(event)) {\n            if (event.data.match(DUO_OPEN_WINDOW_FORMAT)) {\n                var url = event.data.substring(\"DUO_OPEN_WINDOW|\".length);\n                if (isValidUrlToOpen(url)) {\n                    // Open the URL that comes after the DUO_WINDOW_OPEN token.\n                    window.open(url, \"_self\");\n                }\n            }\n            else {\n                // the event came from duo, do the post back\n                doPostBack(event.data);\n\n                // always clean up after yourself!\n                offMessage(onReceivedMessage);\n            }\n        }\n    }\n\n    /**\n     * Validate that this passed in URL is one that we will actually allow to\n     * be opened.\n     * @param url String URL that the message poster wants to open\n     * @returns {boolean} true if we allow this url to be opened in the window\n     */\n    function isValidUrlToOpen(url) {\n        if (!url) {\n            return false;\n        }\n\n        var parser = document.createElement('a');\n        parser.href = url;\n\n        if (parser.protocol === \"duotrustedendpoints:\") {\n            return true;\n        } else if (parser.protocol !== \"https:\") {\n            return false;\n        }\n\n        for (var i = 0; i < VALID_OPEN_WINDOW_DOMAINS.length; i++) {\n           if (parser.hostname.endsWith(\".\" + VALID_OPEN_WINDOW_DOMAINS[i]) ||\n                   parser.hostname === VALID_OPEN_WINDOW_DOMAINS[i]) {\n               return true;\n           }\n        }\n        return false;\n    }\n\n    /**\n     * Register a callback to call ready() after the DOM has loaded.\n     */\n    function asyncReady(options) {\n        var callback = function() {\n            var promptElement = getPromptElement(options);\n            if (!promptElement) {\n                throwError(\n                    'This page does not contain an iframe for Duo to use.' +\n                    ' Add an element like' +\n                    ' <iframe id=\"duo_iframe\"></iframe> to this page.'\n                );\n            }\n\n            ready(promptElement, options.iframeAttributes || {});\n\n            // Always clean up after yourself.\n            offReady(callback)\n        };\n\n        onReady(callback);\n    }\n\n    /**\n     * Point the iframe at Duo, then wait for it to postMessage back to us.\n     */\n    function ready(promptElement, iframeAttributes) {\n        if (!host) {\n            host = getDataAttribute(promptElement, 'host');\n\n            if (!host) {\n                throwError(\n                    'No API hostname is given for Duo to use.  Be sure to pass ' +\n                    'a `host` parameter to Duo.init, or through the `data-host` ' +\n                    'attribute on the iframe element.'\n                );\n            }\n        }\n\n        if (!duoSig || !appSig) {\n            parseSigRequest(getDataAttribute(promptElement, 'sigRequest'));\n\n            if (!duoSig || !appSig) {\n                throwError(\n                    'No valid signed request is given.  Be sure to give the ' +\n                    '`sig_request` parameter to Duo.init, or use the ' +\n                    '`data-sig-request` attribute on the iframe element.'\n                );\n            }\n        }\n\n        // if postAction/Argument are defaults, see if they are specified\n        // as data attributes on the iframe\n        if (postAction === '') {\n            postAction = getDataAttribute(promptElement, 'postAction') || postAction;\n        }\n\n        if (postArgument === 'sig_response') {\n            postArgument = getDataAttribute(promptElement, 'postArgument') || postArgument;\n        }\n\n        if (isIframe(promptElement)) {\n            iframe = promptElement;\n            iframe.src = generateIframeSrc();\n        } else {\n            // If given a container to put an iframe in, clean out any children\n            // child elements in case `init()` was called more than once.\n            while (promptElement.firstChild) {\n                // We call `removeChild()` instead of doing `innerHTML = \"\"`\n                // to make sure we unbind any events.\n                promptElement.removeChild(promptElement.firstChild)\n            }\n\n            iframe = document.createElement('iframe');\n\n            // Set the src and all other attributes on the new iframe.\n            iframeAttributes['src'] = generateIframeSrc();\n            for (var name in iframeAttributes) {\n                iframe.setAttribute(name, iframeAttributes[name]);\n            }\n\n            promptElement.appendChild(iframe);\n        }\n\n        // listen for the 'message' event\n        onMessage(onReceivedMessage);\n    }\n\n    /**\n     * We received a postMessage from Duo.  POST back to the primary service\n     * with the response token, and any additional user-supplied parameters\n     * given in form#duo_form.\n     */\n    // function doPostBack(response) {\n    //     // create a hidden input to contain the response token\n    //     var input = document.createElement('input');\n    //     input.type = 'hidden';\n    //     input.name = postArgument;\n    //     input.value = response + ':' + appSig;\n\n    //     // user may supply their own form with additional inputs\n    //     var form = document.getElementById('duo_form');\n\n    //     // if the form doesn't exist, create one\n    //     if (!form) {\n    //         form = document.createElement('form');\n\n    //         // insert the new form after the iframe\n    //         iframe.parentElement.insertBefore(form, iframe.nextSibling);\n    //     }\n\n    //     // make sure we are actually posting to the right place\n    //     form.method = 'POST';\n    //     form.action = postAction;\n\n    //     // add the response token input to the form\n    //     form.appendChild(input);\n\n    //     // away we go!\n    //     if (typeof submitCallback === \"function\") {\n    //         submitCallback.call(null, form);\n    //     } else {\n    //         form.submit();\n    //     }\n    // }\n\n    // OKTA: Overriding their doPostBack logic because we want to submit this\n    // through ajax, not a postBack\n    function doPostBack(response) {\n        postAction(response + ':' + appSig);\n    }\n    \n\n    return {\n        init: init,\n        _onReady: onReady,\n        _parseSigRequest: parseSigRequest,\n        _isDuoMessage: isDuoMessage,\n        _doPostBack: doPostBack\n    };\n}));","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint camelcase: 0*/\nimport { $, _, loc } from '@okta/courage';\nimport Duo from '@okta/duo';\nimport Q from 'q';\nimport FormController from 'v1/util/FormController';\nimport Footer from 'v1/views/enroll-factors/Footer';\nexport default FormController.extend({\n  className: 'enroll-duo duo-form',\n\n  Model: {\n    props: {\n      host: 'string',\n      signature: 'string',\n      postAction: 'string',\n      factorId: 'string',\n      stateToken: 'string',\n    },\n\n    getInitOptions: function() {\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'web',\n          provider: 'DUO',\n        });\n\n        return factor.enroll();\n      });\n    },\n\n    activate: function(signedResponse) {\n      const url = this.get('postAction');\n      const factorId = this.get('factorId');\n      const self = this;\n      const data = {\n        id: factorId,\n        stateToken: this.get('stateToken'),\n        sig_response: signedResponse,\n      };\n      // Note: We should be doing this in OktaAuth! Fix when it's updated.\n\n      // We don't actually use authClient.post() here (unlike all the other cases in the\n      // sign-in widget) since the endpoint is wired to accept serialized form post instead\n      // of a JSON post ($.post() is different from authClient.post() in that in $.post(),\n      // jquery decides the Content-Type instead of it being a JSON type). Enroll/Verify DUO\n      // are the only two places where we actually do this.\n      // NOTE - If we ever decide to change this, we should test this very carefully.\n      return Q($.post(url, data))\n        .then(function() {\n          return self.doTransaction(function(transaction) {\n            return transaction.poll();\n          });\n        })\n        .catch(function(err) {\n          self.trigger('error', self, err.xhr);\n        });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    noButtonBar: true,\n    title: _.partial(loc, 'enroll.duo.title', 'login'),\n\n    postRender: function() {\n      this.add('<iframe frameborder=\"0\" title=\"' + this.title() + '\"></iframe>');\n      Duo.init({\n        host: this.model.get('host'),\n        sig_request: this.model.get('signature'),\n        iframe: this.$('iframe').get(0),\n        post_action: _.bind(this.model.activate, this.model),\n      });\n    },\n  },\n\n  Footer: Footer,\n\n  fetchInitialData: function() {\n    const self = this;\n\n    return this.model.getInitOptions(this.options.appState).then(function(trans) {\n      const res = trans.data;\n\n      if (\n        !res ||\n        !res._embedded ||\n        !res._embedded.factor ||\n        !res._embedded.factor._embedded ||\n        !res._embedded.factor._embedded.activation\n      ) {\n        throw new Error('Response does not have duo activation options');\n      }\n\n      const factor = res._embedded.factor;\n      const activation = factor._embedded.activation;\n\n      self.model.set({\n        host: activation.host,\n        signature: activation.signature,\n        postAction: activation._links.complete.href,\n        factorId: factor.id,\n        stateToken: res.stateToken,\n      });\n    });\n  },\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate')) {\n      return true;\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Footer from 'v1/views/enroll-factors/Footer';\n\nconst Model = {\n  local: {\n    factorType: 'string',\n    provider: 'string',\n  },\n  save: function() {\n    this.trigger('save');\n    const factorOpt = this.pick('factorType', 'provider');\n    return this.doTransaction(function(transaction) {\n      const factor = _.findWhere(transaction.factors, factorOpt);\n\n      return factor.enroll();\n    });\n  },\n};\n\nconst Form = function() {\n  return {\n    title: _.partial(loc, 'email.enroll.title', 'login'),\n    noButtonBar: false,\n    autoSave: true,\n    save: _.partial(loc, 'email.button.send', 'login'),\n    formChildren: [\n      FormType.View({\n        View: View.extend({\n          attributes: {\n            'data-se': 'enroll-email-content',\n          },\n          template: hbs('{{i18n code=\"email.enroll.description\" bundle=\"login\"}}'),\n        }),\n      }),\n    ],\n  };\n};\n\nexport default FormController.extend({\n  className: 'enroll-email',\n\n  Model: Model,\n\n  Form: Form,\n\n  Footer: Footer,\n\n  initialize: function() {\n    this.model.set(_.pick(this.options, 'factorType', 'provider'));\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nexport default FormController.extend({\n  className: 'enroll-hotp',\n  Model: function() {\n    return {\n      local: {\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n    };\n  },\n  Form: {\n    title: function() {\n      const factors = this.options.appState.get('factors');\n      const hotpFactor = factors.findWhere({\n        provider: this.model.get('__provider__'),\n        factorType: this.model.get('__factorType__'),\n      });\n      return loc('enroll.totp.title', 'login', [hotpFactor.get('factorLabel')]);\n    },\n    noButtonBar: true,\n    attributes: { 'data-se': 'restrict-enroll' },\n\n    formChildren: function() {\n      const children = [\n        FormType.View({\n          View: new HtmlErrorMessageView({ message: loc('enroll.hotp.restricted', 'login') }),\n        }),\n      ];\n\n      return children;\n    },\n  },\n\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport TextBox from 'v1/views/shared/TextBox';\n\nfunction isRSA(provider) {\n  return provider === 'RSA';\n}\n\nfunction getClassName(provider) {\n  return isRSA(provider) ? 'enroll-rsa' : 'enroll-onprem';\n}\n\nexport default FormController.extend({\n  className: function() {\n    return getClassName(this.options.provider);\n  },\n  Model: function() {\n    const provider = this.options.provider;\n    const factors = this.options.appState.get('factors');\n    const factor = factors.findWhere(_.pick(this.options, 'provider', 'factorType'));\n    const profile = factor.get('profile');\n    const credentialId = profile && profile.credentialId ? profile.credentialId : '';\n\n    return {\n      props: {\n        credentialId: ['string', true, credentialId],\n        passCode: ['string', true],\n        factorId: 'string',\n      },\n      save: function() {\n        return this.doTransaction(function(transaction) {\n          const factor = _.findWhere(transaction.factors, {\n            factorType: 'token',\n            provider: provider,\n          });\n\n          return factor.enroll({\n            passCode: this.get('passCode'),\n            profile: { credentialId: this.get('credentialId') },\n          });\n        });\n      },\n    };\n  },\n\n  Form: function() {\n    const provider = this.options.provider;\n    const factors = this.options.appState.get('factors');\n    const factor = factors.findWhere(_.pick(this.options, 'provider', 'factorType'));\n    const vendorName = factor.get('vendorName');\n    const title = isRSA(provider) ? loc('factor.totpHard.rsaSecurId', 'login') : vendorName;\n\n    return {\n      title: title,\n      noButtonBar: true,\n      autoSave: true,\n      className: getClassName(provider),\n      initialize: function() {\n        this.listenTo(this.model, 'error', (source, error) => {\n          if (error && error.status === 409) {\n            // 409 means we are in change pin, so we should clear out answer input\n            this.$('.o-form-input-name-passCode input').val('');\n            this.$('.o-form-input-name-passCode input').trigger('change');\n            this.$('.o-form-input-name-passCode input').focus();\n          }\n        });\n      },\n      formChildren: [\n        FormType.Input({\n          label: loc('enroll.onprem.username.placeholder', 'login', [vendorName]),\n          'label-top': true,\n          explain: Util.createInputExplain(\n            'enroll.onprem.username.tooltip',\n            'enroll.onprem.username.placeholder',\n            'login',\n            [vendorName],\n            [vendorName]\n          ),\n          'explain-top': true,\n          name: 'credentialId',\n          input: TextBox,\n          type: 'text',\n        }),\n        FormType.Input({\n          label: loc('enroll.onprem.passcode.placeholder', 'login', [vendorName]),\n          'label-top': true,\n          explain: Util.createInputExplain(\n            'enroll.onprem.passcode.tooltip',\n            'enroll.onprem.passcode.placeholder',\n            'login',\n            [vendorName],\n            [vendorName]\n          ),\n          'explain-top': true,\n          name: 'passCode',\n          input: TextBox,\n          type: 'password',\n        }),\n        FormType.Toolbar({\n          noCancelButton: true,\n          save: loc('mfa.challenge.verify', 'login'),\n        }),\n      ],\n    };\n  },\n\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc } from '@okta/courage';\nconst fn = {};\n\n// Validate the 'username' field on the model.\nfn.validateUsername = function(model) {\n  const username = model.get('username');\n\n  if (username && username.length > 256) {\n    return {\n      username: loc('model.validation.field.username', 'login'),\n    };\n  }\n};\n\n// Validate that the field1 and field2 fields on the model are a match.\nfn.validateFieldsMatch = function(model, field1, field2, message) {\n  if (model.get(field1) !== model.get(field2)) {\n    const ret = {};\n\n    ret[field2] = message;\n    return ret;\n  }\n};\n\n// Validate that the 'newPassword' and 'confirmPassword' fields on the model are a match.\nfn.validatePasswordMatch = function(model) {\n  return fn.validateFieldsMatch(model, 'newPassword', 'confirmPassword', loc('password.error.match', 'login'));\n};\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport ValidationUtil from 'v1/util/ValidationUtil';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default FormController.extend({\n  className: 'enroll-password',\n  Model: {\n    props: {\n      password: ['string', true],\n      confirmPassword: ['string', true],\n    },\n    validate: function() {\n      return ValidationUtil.validateFieldsMatch(\n        this,\n        'password',\n        'confirmPassword',\n        loc('password.enroll.error.match', 'login')\n      );\n    },\n    save: function() {\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'password',\n          provider: 'OKTA',\n        });\n\n        return factor.enroll({\n          profile: {\n            password: this.get('password'),\n          },\n        });\n      });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    title: _.partial(loc, 'enroll.password.setup', 'login'),\n    inputs: function() {\n      return [\n        {\n          label: loc('mfa.challenge.password.placeholder', 'login'),\n          'label-top': true,\n          className: 'o-form-fieldset o-form-label-top auth-passcode',\n          name: 'password',\n          input: TextBox,\n          type: 'password',\n        },\n        {\n          label: loc('password.confirmPassword.placeholder', 'login'),\n          'label-top': true,\n          className: 'o-form-fieldset o-form-label-top auth-passcode',\n          name: 'confirmPassword',\n          input: TextBox,\n          type: 'password',\n        },\n      ];\n    },\n  },\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport Util from 'util/Util';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default FormController.extend({\n  className: 'enroll-question',\n  Model: {\n    props: {\n      question: 'string',\n      answer: ['string', true],\n    },\n    local: {\n      securityQuestions: 'object',\n    },\n    save: function() {\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'question',\n          provider: 'OKTA',\n        });\n\n        return factor.enroll({\n          profile: {\n            question: this.get('question'),\n            answer: this.get('answer'),\n          },\n        });\n      });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    title: _.partial(loc, 'enroll.securityQuestion.setup', 'login'),\n    inputs: function() {\n      return [\n        {\n          label: false,\n          'label-top': true,\n          name: 'question',\n          type: 'select',\n          wide: true,\n          options: function() {\n            return this.model.get('securityQuestions');\n          },\n          params: {\n            searchThreshold: 25,\n          },\n        },\n        {\n          label: loc('mfa.challenge.answer.placeholder', 'login'),\n          'label-top': true,\n          explain: Util.createInputExplain('mfa.challenge.answer.tooltip', 'mfa.challenge.answer.placeholder', 'login'),\n          'explain-top': true,\n          className: 'o-form-fieldset o-form-label-top auth-passcode',\n          name: 'answer',\n          input: TextBox,\n          type: 'text',\n        },\n      ];\n    },\n  },\n\n  Footer: Footer,\n\n  fetchInitialData: function() {\n    const self = this;\n\n    return this.model\n      .manageTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'question',\n          provider: 'OKTA',\n        });\n\n        return factor.questions();\n      })\n      .then(function(questionsRes) {\n        const questions = {};\n\n        _.each(questionsRes, function(question) {\n          questions[question.question] = FactorUtil.getSecurityQuestionLabel(question);\n        });\n        self.model.set('securityQuestions', questions);\n      });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default FormController.extend({\n  className: 'enroll-symantec',\n  Model: {\n    props: {\n      credentialId: ['string', true],\n      passCode: ['string', true],\n      nextPassCode: ['string', true],\n      factorId: 'string',\n    },\n    save: function() {\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'token',\n          provider: 'SYMANTEC',\n        });\n\n        return factor.enroll({\n          passCode: this.get('passCode'),\n          nextPassCode: this.get('nextPassCode'),\n          profile: { credentialId: this.get('credentialId') },\n        });\n      });\n    },\n  },\n\n  Form: {\n    title: _.partial(loc, 'factor.totpHard.symantecVip', 'login'),\n    subtitle: _.partial(loc, 'enroll.symantecVip.subtitle', 'login'),\n    noButtonBar: true,\n    autoSave: true,\n    className: 'enroll-symantec',\n    formChildren: function() {\n      return [\n        FormType.Input({\n          label: loc('enroll.symantecVip.credentialId.placeholder', 'login'),\n          'label-top': true,\n          explain: Util.createInputExplain(\n            'enroll.symantecVip.credentialId.tooltip',\n            'enroll.symantecVip.credentialId.placeholder',\n            'login'\n          ),\n          'explain-top': true,\n          name: 'credentialId',\n          input: TextBox,\n          type: 'text',\n        }),\n        FormType.Input({\n          label: loc('enroll.symantecVip.passcode1.placeholder', 'login'),\n          'label-top': true,\n          explain: Util.createInputExplain(\n            'enroll.symantecVip.passcode1.tooltip',\n            'enroll.symantecVip.passcode1.placeholder',\n            'login'\n          ),\n          'explain-top': true,\n          name: 'passCode',\n          input: TextBox,\n          type: 'text',\n        }),\n        FormType.Input({\n          label: loc('enroll.symantecVip.passcode2.placeholder', 'login'),\n          'label-top': true,\n          explain: Util.createInputExplain(\n            'enroll.symantecVip.passcode2.tooltip',\n            'enroll.symantecVip.passcode2.placeholder',\n            'login'\n          ),\n          'explain-top': true,\n          name: 'nextPassCode',\n          input: TextBox,\n          type: 'text',\n        }),\n        FormType.Toolbar({\n          noCancelButton: true,\n          save: loc('mfa.challenge.verify', 'login'),\n        }),\n      ];\n    },\n  },\n\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport default {\n  OKTA: {\n    APPLE: 'https://itunes.apple.com/us/app/okta-verify/id490179405',\n    ANDROID: 'https://play.google.com/store/apps/details?id=com.okta.android.auth',\n  },\n  GOOGLE: {\n    APPLE: 'https://itunes.apple.com/us/app/google-authenticator/id388497605',\n    ANDROID: 'https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2',\n  },\n  STORE: {\n    APPLE: 'App Store',\n    ANDROID: 'Google Play Store',\n  },\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport StoreLinks from 'v1/util/StoreLinks';\nimport Footer from 'v1/views/enroll-factors/Footer';\nconst showWhenDeviceTypeSelected = {\n  __deviceType__: function(val) {\n    return val !== undefined;\n  },\n};\nconst EnrollTotpControllerAppDownloadInstructionsView = View.extend({\n  attributes: { 'data-se': 'app-download-instructions' },\n  className: 'app-download-instructions',\n  template: hbs(\n    '\\\n      <span class=\"app-logo {{appIcon}}\"></span>\\\n      <p class=\"instructions\">{{{appStoreLinkText}}}</p>\\\n    '\n  ),\n  initialize: function() {\n    this.listenTo(this.model, 'change:__deviceType__', this.render);\n  },\n  postRender: function() {\n    const link  = this.$el.find('.instructions a');\n    if (link.length) {\n      link[0].setAttribute('target', '_blank');\n      link[0].setAttribute('rel', 'noreferer noopener');\n    }\n  },\n  getTemplateData: function() {\n    let appStoreLink;\n    let appIcon;\n    let appStoreName;\n    const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n\n    appStoreName = StoreLinks.STORE[this.model.get('__deviceType__')];\n    if (this.model.get('__provider__') === 'GOOGLE') {\n      appStoreLink = StoreLinks.GOOGLE[this.model.get('__deviceType__')];\n      appIcon = 'google-auth-38';\n    } else {\n      appStoreLink = StoreLinks.OKTA[this.model.get('__deviceType__')];\n      appIcon = 'okta-verify-download-icon';\n    }\n    return {\n      appStoreLinkText: loc('enroll.totp.downloadApp', 'login', [appStoreLink, factorName, appStoreName]),\n      appIcon: appIcon,\n    };\n  },\n});\nconst EnrollTotpControllerEnrollTotpController = FormController.extend({\n  className: 'enroll-totp',\n  Model: function() {\n    return {\n      local: {\n        __deviceType__: 'string',\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n      save: function() {\n        return this.doTransaction(function(transaction) {\n          const factor = _.findWhere(transaction.factors, {\n            factorType: this.get('__factorType__'),\n            provider: this.get('__provider__'),\n          });\n\n          return factor.enroll();\n        });\n      },\n    };\n  },\n\n  Form: {\n    title: function() {\n      const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n\n      return loc('enroll.totp.title', 'login', [factorName]);\n    },\n    noButtonBar: true,\n    attributes: { 'data-se': 'step-device-type' },\n\n    formChildren: function() {\n      const inputOptions = {\n        APPLE: loc('iphone', 'login'),\n        ANDROID: loc('android', 'login'),\n      };\n      const children = [\n        FormType.Input({\n          name: '__deviceType__',\n          type: 'radio',\n          options: inputOptions,\n          group: true,\n          label: _.partial(loc, 'enroll.totp.selectDevice', 'login'),\n        }),\n        FormType.Divider({ showWhen: showWhenDeviceTypeSelected }),\n        FormType.View({\n          View: EnrollTotpControllerAppDownloadInstructionsView,\n          showWhen: showWhenDeviceTypeSelected,\n        }),\n        FormType.Button({\n          title: loc('oform.next', 'login'),\n          attributes: {\n            'data-type': 'save'\n          },\n          className: 'button button-primary default-custom-button',\n          click: function() {\n            this.model.save();\n          },\n          showWhen: showWhenDeviceTypeSelected,\n        }),\n      ];\n\n      return children;\n    },\n  },\n\n  Footer: Footer,\n});\nexport default EnrollTotpControllerEnrollTotpController;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity:[2, 9] */\n\nimport { loc } from '@okta/courage';\nconst fn = {};\n\nfn.getU2fEnrollErrorMessageKeyByCode = function(errorCode) {\n  switch (errorCode) {\n  default:\n  case 1:\n    return 'u2f.error.other';\n  case 2:\n  case 3:\n    return 'u2f.error.badRequest';\n  case 4:\n    return 'u2f.error.unsupported';\n  case 5:\n    return 'u2f.error.timeout';\n  }\n};\n\nfn.getU2fVerifyErrorMessageKeyByCode = function(errorCode, isOneFactor) {\n  switch (errorCode) {\n  case 1:\n    // OTHER_ERROR\n    return isOneFactor ? 'u2f.error.other.oneFactor' : 'u2f.error.other';\n  case 2: // BAD_REQUEST\n  case 3:\n    // CONFIGURATION_UNSUPPORTED\n    return isOneFactor ? 'u2f.error.badRequest.oneFactor' : 'u2f.error.badRequest';\n  case 4:\n    // DEVICE_INELIGIBLE\n    return isOneFactor ? 'u2f.error.unsupported.oneFactor' : 'u2f.error.unsupported';\n  case 5:\n    // TIMEOUT\n    return 'u2f.error.timeout';\n  }\n};\n\nfn.getU2fEnrollErrorMessageByCode = function(errorCode) {\n  return loc(fn.getU2fEnrollErrorMessageKeyByCode(errorCode), 'login');\n};\n\nfn.getU2fVerifyErrorMessageByCode = function(errorCode, isOneFactor) {\n  return loc(fn.getU2fVerifyErrorMessageKeyByCode(errorCode, isOneFactor), 'login');\n};\n\nfn.getU2fVersion = function() {\n  return 'U2F_V2';\n};\n\nfn.isU2fAvailable = function() {\n  return Object.prototype.hasOwnProperty.call(window, 'u2f');\n};\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* global u2f */\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Q from 'q';\nimport 'u2f-api-polyfill';\nimport { U2FError } from 'util/Errors';\nimport FidoUtil from 'util/FidoUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nexport default FormController.extend({\n  className: 'enroll-u2f',\n  Model: {\n    local: {\n      __enrolled__: 'boolean',\n    },\n\n    save: function() {\n      this.trigger('request');\n\n      if (this.get('__enrolled__')) {\n        return this.activate();\n      }\n\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'u2f',\n          provider: 'FIDO',\n        });\n\n        return factor.enroll();\n      });\n    },\n\n    activate: function() {\n      this.set('__enrolled__', true);\n      this.trigger('errors:clear');\n\n      return this.doTransaction(function(transaction) {\n        const activation = transaction.factor.activation;\n        const appId = activation.appId;\n        const registerRequests = [\n          {\n            version: FidoUtil.getU2fVersion(),\n            challenge: activation.nonce,\n          },\n        ];\n        const self = this;\n        const deferred = Q.defer();\n\n        u2f.register(appId, registerRequests, [], function(data) {\n          self.trigger('errors:clear');\n          if (data.errorCode && data.errorCode !== 0) {\n            deferred.reject(\n              new U2FError({\n                xhr: {\n                  responseJSON: {\n                    errorSummary: FidoUtil.getU2fEnrollErrorMessageByCode(data.errorCode),\n                  },\n                },\n              })\n            );\n          } else {\n            deferred.resolve(\n              transaction.activate({\n                registrationData: data.registrationData,\n                version: data.version,\n                challenge: data.challenge,\n                clientData: data.clientData,\n              })\n            );\n          }\n        });\n        return deferred.promise;\n      });\n    },\n  },\n\n  Form: {\n    title: _.partial(loc, 'enroll.u2f.title', 'login'),\n    save: _.partial(loc, 'enroll.u2f.save', 'login'),\n    noCancelButton: true,\n    hasSavingState: false,\n    autoSave: true,\n    className: 'enroll-u2f-form',\n    noButtonBar: function() {\n      return !FidoUtil.isU2fAvailable();\n    },\n    modelEvents: {\n      request: '_startEnrollment',\n      error: '_stopEnrollment',\n    },\n    formChildren: function() {\n      const result = [];\n\n      if (!FidoUtil.isU2fAvailable()) {\n        let errorMessageKey = 'u2f.error.factorNotSupported';\n\n        if (this.options.appState.get('factors').length === 1) {\n          errorMessageKey = 'u2f.error.factorNotSupported.oneFactor';\n        }\n        result.push(\n          FormType.View(\n            { View: new HtmlErrorMessageView({ message: loc(errorMessageKey, 'login') }) },\n            { selector: '.o-form-error-container' }\n          )\n        );\n      } else {\n        //There is html in enroll.u2f.general2 in our properties file, reason why is unescaped\n        result.push(\n          FormType.View({\n            View: View.extend({\n              template: hbs(\n                '<div class=\"u2f-instructions\"><ol>\\\n                <li>{{{i18n code=\"enroll.u2f.general2\" bundle=\"login\"}}}</li>\\\n                <li>{{i18n code=\"enroll.u2f.general3\" bundle=\"login\"}}</li>\\\n                </ol></div>'\n              ),\n            }),\n          })\n        );\n\n        result.push(\n          FormType.View({\n            View: View.extend({\n              template: hbs(\n                '\\\n                <div class=\"u2f-enroll-text hide\">\\\n                  <p>{{i18n code=\"enroll.u2f.instructions\" bundle=\"login\"}}</p>\\\n                  <p>{{i18n code=\"enroll.u2f.instructionsBluetooth\" bundle=\"login\"}}</p>\\\n                  <div data-se=\"u2f-devices\" class=\"u2f-devices-images\">\\\n                    <div class=\"u2f-usb\"></div>\\\n                    <div class=\"u2f-bluetooth\"></div>\\\n                  </div>\\\n                  <div data-se=\"u2f-waiting\" class=\"okta-waiting-spinner\"></div>\\\n                </div>'\n              ),\n            }),\n          })\n        );\n      }\n\n      return result;\n    },\n\n    _startEnrollment: function() {\n      this.$('.u2f-instructions').addClass('hide');\n      this.$('.u2f-enroll-text').removeClass('hide');\n      this.$('.o-form-button-bar').hide();\n    },\n\n    _stopEnrollment: function() {\n      this.$('.u2f-instructions').removeClass('hide');\n      this.$('.u2f-enroll-text').addClass('hide');\n      this.$('.o-form-button-bar').show();\n    },\n  },\n\n  Footer: Footer,\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate')) {\n      this.model.activate();\n      return true;\n    }\n  },\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the 'License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport BaseLoginModel from './BaseLoginModel';\nexport default BaseLoginModel.extend({\n  initialize: function(options) {\n    this.options = options || {};\n    this.appState = this.options.appState;\n  },\n  constructPostData: function(profileAttributes) {\n    const postData = {\n      registration: {\n        profile: profileAttributes,\n      },\n    };\n\n    // send createNewAccount flag for new user creation\n    if (this.appState.get('policy').registration.createNewAccount) {\n      postData.registration['createNewAccount'] = true;\n    }\n    return postData;\n  },\n  getEnrollFormData: function() {\n    return this.manageTransaction(function(transaction, setTransaction) {\n      return transaction.enroll().then(function(trans) {\n        setTransaction(trans);\n      });\n    });\n  },\n  save: function() {\n    let data = BaseLoginModel.prototype.toJSON.apply(this, arguments);\n\n    data = _.omit(data, ['appState', 'settings', 'createNewAccount']);\n    if (_.isEmpty(data)) {\n      const error = {\n        errorSummary: loc('oform.errorbanner.title', 'login'),\n      };\n\n      this.trigger('error', this, {\n        responseJSON: error,\n      });\n    } else {\n      return this.manageTransaction(function(transaction, setTransaction) {\n        transaction.enroll(this.constructPostData(data)).then(function(trans) {\n          setTransaction(trans);\n        });\n      });\n    }\n  },\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, internal } from '@okta/courage';\nlet { BaseSchema } = internal.models;\nexport default BaseSchema.Model.extend({\n  expand: ['schema'],\n  setFieldPlaceholder: function(formFields) {\n    _.each(formFields, function(formField) {\n      formField.title = formField.label;\n    });\n    return formFields;\n  },\n  initialize: function(options) {\n    let profileAttributes = options.profileSchemaAttributes;\n\n    profileAttributes = this.setFieldPlaceholder(profileAttributes);\n    if (profileAttributes) {\n      const userProfileSchema = {\n        properties: {},\n      };\n\n      for (var i = 0; i < profileAttributes.length; i++) {\n        const profileAttributeObject = profileAttributes[i];\n\n        userProfileSchema.properties[profileAttributeObject.name] = profileAttributeObject;\n      }\n      this.parse.apply(this, [{ schema: userProfileSchema }]);\n    }\n  },\n});\n","/* eslint max-statements: [2, 23],  max-depth: [2, 3], complexity: [2, 13] */\n/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, internal, $ } from '@okta/courage';\nimport TextBox from 'v1/views/shared/TextBox';\nlet { SchemaFormFactory } = internal.views.forms.helpers;\n\nconst getParts = function(username) {\n  const usernameArr = username.split('');\n  const minPartsLength = 3;\n  const userNameParts = [];\n  const delimiters = [',', '.', '-', '_', '#', '@'];\n  let userNamePart = '';\n\n  _.each(usernameArr, function(part) {\n    if (delimiters.indexOf(part) === -1) {\n      userNamePart += part;\n    } else {\n      if (userNamePart.length >= minPartsLength) {\n        userNameParts.push(_.clone(userNamePart));\n      }\n      userNamePart = '';\n    }\n  });\n  if (userNamePart.length >= minPartsLength) {\n    userNameParts.push(_.clone(userNamePart));\n  }\n  return userNameParts.filter(Boolean);\n};\n\nconst passwordContainsFormField = function(formField, password) {\n  if (!formField) {\n    return false;\n  }\n  formField = formField.toLowerCase();\n  password = password.toLowerCase();\n  const formFieldArr = getParts(formField);\n\n  //check if each formField part contains password\n  for (var i = 0; i < formFieldArr.length; i++) {\n    const formFieldPart = formFieldArr[i];\n\n    if (password.indexOf(formFieldPart) !== -1) {\n      return true;\n    }\n  }\n  return false;\n};\n\nconst checkSubSchema = function(subSchema, value, model) {\n  const minLength = subSchema.get('minLength');\n  const maxLength = subSchema.get('maxLength');\n  const regex = subSchema.get('format');\n\n  if (_.isNumber(minLength)) {\n    if (value.length < minLength) {\n      return false;\n    }\n  }\n\n  if (_.isNumber(maxLength)) {\n    if (value.length > maxLength) {\n      return false;\n    }\n  }\n  const password = value;\n\n  if (_.isString(regex)) {\n    // call passwordContainsFormField if regex is userName, firstName, lastName\n    if (regex === '^[#/userName]' || regex === '^[#/firstName]' || regex === '^[#/lastName]') {\n      const fieldName = regex.split('^[#/')[1].split(']')[0];\n      let fieldValue = model.get(fieldName);\n\n      if (fieldName === 'userName') {\n        // with email as login enabled, we only have email populated\n        // Therefore we fallback and run validation with email attribute.\n        fieldValue = model.has('userName') ? model.get('userName') : model.get('email');\n      }\n      return !passwordContainsFormField(fieldValue, password);\n    } else {\n      if (!new RegExp(regex).test(value)) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n};\n\nconst checkSubSchemas = function(fieldName, model, subSchemas, showError) {\n  const value = model.get(fieldName);\n\n  if (!_.isString(value)) {\n    return;\n  }\n\n  subSchemas.each(function(subSchema, index) {\n    const ele = $('#subschemas-' + fieldName + ' .subschema-' + index);\n\n    //hide password complexity if no password\n    if (value) {\n      ele.children('p').removeClass('default-schema');\n    } else {\n      ele.children('p').addClass('default-schema');\n    }\n\n    // clear aria role and live-region for re-validation\n    ele.children('p')\n      .removeAttr('role')\n      .removeAttr('aria-live');\n\n    // reset errors\n    ele.removeClass('subschema-satisfied subschema-unsatisfied subschema-error');\n\n    // validate\n    if (checkSubSchema(subSchema, value, model)) {\n      // passed\n      ele.addClass('subschema-satisfied');\n      ele.find('p span').removeClass('error error-16-small');\n      ele.find('p span').addClass('confirm-16');\n    } else {\n      // failed\n      if (showError) {\n        ele.find('p span').removeClass('confirm-16');\n        ele.find('p span').addClass('error error-16-small');\n        ele.addClass('subschema-error subschema-unsatisfied');\n\n        ele.find('p')\n          // set role=\"alert\" so the password requirement is read by\n          // screen-readers\n          .attr('role', 'alert')\n          // set aria-live=\"polite\" so it will \"debounce\" and wait to read the\n          // message between keystrokes\n          .attr('aria-live', 'polite');\n      }\n    }\n  });\n};\n\nconst fnCreateInputOptions = function(schemaProperty) {\n  let inputOptions = SchemaFormFactory.createInputOptions(schemaProperty);\n\n  if (inputOptions.type === 'select') {\n    inputOptions = _.extend(inputOptions, {\n      label: schemaProperty.get('title'),\n    });\n  } else {\n    let placeholder = schemaProperty.get('title');\n\n    if (schemaProperty.get('required')) {\n      placeholder += ' *';\n    }\n    inputOptions = _.extend(inputOptions, {\n      label: false,\n      'label-top': true,\n      placeholder: placeholder,\n    });\n  }\n\n  const fieldName = schemaProperty.get('name');\n\n  switch (fieldName) {\n  case 'userName':\n    inputOptions.input = TextBox;\n    inputOptions.params = {\n      icon: 'person-16-gray',\n    };\n    break;\n  case 'password':\n    inputOptions.type = 'password';\n    inputOptions.input = TextBox;\n    inputOptions.params = {\n      icon: 'remote-lock-16',\n    };\n  }\n\n  const subSchemas = schemaProperty.get('subSchemas');\n\n  if (subSchemas) {\n    inputOptions.events = {\n      input: function() {\n        checkSubSchemas(fieldName, this.model, subSchemas, true);\n      },\n      focusout: function() {\n        checkSubSchemas(fieldName, this.model, subSchemas, true);\n      },\n      'change:userName': function() {\n        checkSubSchemas(fieldName, this.model, subSchemas, true);\n      },\n      'change:firstName': function() {\n        checkSubSchemas(fieldName, this.model, subSchemas, true);\n      },\n      'change:lastName': function() {\n        checkSubSchemas(fieldName, this.model, subSchemas, true);\n      },\n      'change:email': function() {\n        checkSubSchemas(fieldName, this.model, subSchemas, true);\n      },\n    };\n  }\n\n  return inputOptions;\n};\n\nexport default {\n  createInputOptions: fnCreateInputOptions,\n  getUsernameParts: getParts,\n  passwordContainsFormField: passwordContainsFormField,\n};\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-len: [2, 130] */\nimport { Form, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport ProfileSchema from 'v1/models/ProfileSchema';\nimport RegistrationFormFactory from 'v1/util/RegistrationFormFactory';\nexport default Form.extend({\n  layout: 'o-form-theme',\n  autoSave: true,\n  noCancelButton: true,\n  title() {\n    return loc('registration.form.title', 'login');\n  },\n  save() {\n    return loc('registration.form.submit', 'login');\n  },\n  initialize: function(options) {\n    this.options = options || {};\n    this.schema = new ProfileSchema({\n      profileSchemaAttributes: this.options.appState.get('policy').registration.profile,\n    });\n    this.schema.properties.each(schemaProperty => {\n      const inputOptions = RegistrationFormFactory.createInputOptions(schemaProperty);\n\n      this.addInput(inputOptions);\n    });\n    const requiredFieldsLabel = hbs('<span class=\"required-fields-label\">{{label}}</span>')({\n      label: loc('registration.required.fields.label', 'login'),\n    });\n\n    this.add(requiredFieldsLabel);\n  },\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nexport default View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help\" data-se=\"back-link\">\\\n        {{i18n code=\"goback\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .help': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n  },\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    this.options.appState.trigger('navigate', '');\n  }\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport EnrollUser from 'v1/models/EnrollUser';\nimport BaseLoginController from 'v1/util/BaseLoginController';\nimport EnrollUserForm from 'v1/views/enrollUser/EnrollUserForm';\nimport FooterWithBackLink from 'v1/views/shared/FooterWithBackLink';\nexport default BaseLoginController.extend({\n  className: 'enroll-user',\n  initialize: function(options) {\n    this.options = options || {};\n    // create model\n    this.model = new EnrollUser(this.options);\n  },\n  fetchInitialData: function() {\n    // If user is unauthenticated and starts enroll flow make a post call to transition state to PROFILE_REQUIRED\n    if (this.options.appState.get('isUnauthenticated')) {\n      return this.model.getEnrollFormData();\n    } else {\n      return BaseLoginController.prototype.fetchInitialData.call();\n    }\n  },\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isProfileRequired')) {\n      return true;\n    }\n  },\n  postRender: function() {\n    const form = new EnrollUserForm(this.toJSON());\n\n    this.add(form);\n    this.add(new FooterWithBackLink(this.toJSON()));\n    this.addListeners();\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* global Uint8Array, atob, btoa */\n\nconst fn = {};\n\n/**\n * Light weight hashing algorithm that hashes string into an integer between 0 and 4294967295\n * Not recommended for data set of size greater than 10000\n * https://www.npmjs.com/package/string-hash\n *\n * @param str the string to be hashed\n * @returns string hash of integer type\n */\nfn.getStringHash = function(str) {\n  let hash = 5381;\n  let i = str.length;\n\n  while (i) {\n    hash = (hash * 33) ^ str.charCodeAt(--i);\n  }\n  return hash >>> 0;\n};\n\n/**\n * Converts any url safe characters in a base64 string to regular base64 characters\n * @param str base64 string that might contain url safe characters\n * @returns base64 formatted string\n */\nfn.base64UrlSafeToBase64 = function(str) {\n  return str.replace(new RegExp('_', 'g'), '/').replace(new RegExp('-', 'g'), '+');\n};\n\n/**\n * Converts an ArrayBuffer object that contains binary data to base64 encoded string\n * @param bin ArrayBuffer object\n * @returns base64 encoded string\n */\nfn.binToStr = function(bin) {\n  return btoa(new Uint8Array(bin).reduce((s, byte) => s + String.fromCharCode(byte), ''));\n};\n\n/**\n * Converts base64 string to binary data view\n * @param str in base64 or base64UrlSafe format\n * @returns converted Uint8Array view of binary data\n */\nfn.strToBin = function(str) {\n  return Uint8Array.from(atob(this.base64UrlSafeToBase64(str)), c => c.charCodeAt(0));\n};\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport Q from 'q';\nimport FidoUtil from 'util/FidoUtil';\n\nfunction adaptToOkta(promise) {\n  return new Q(promise);\n}\n\nfunction makeCredential(accountInfo, cryptoParams, challenge) {\n  cryptoParams = cryptoParams.map(function(param) {\n    return { type: 'FIDO_2_0', algorithm: param.algorithm };\n  });\n\n  const promise = window.msCredentials.makeCredential(accountInfo, cryptoParams, challenge).then(function(cred) {\n    return Object.freeze({\n      credential: { id: cred.id },\n      publicKey: JSON.parse(cred.publicKey),\n      attestation: cred.attestation,\n    });\n  });\n\n  return adaptToOkta(promise);\n}\n\nfunction getAssertion(challenge, allowList) {\n  const accept = allowList.map(function(item) {\n    return { type: 'FIDO_2_0', id: item.id };\n  });\n  const filters = { accept: accept };\n  const promise = window.msCredentials.getAssertion(challenge, filters).then(function(attestation) {\n    const signature = attestation.signature;\n\n    return Object.freeze({\n      credential: { id: attestation.id },\n      clientData: signature.clientData,\n      authenticatorData: signature.authnrData,\n      signature: signature.signature,\n    });\n  });\n\n  return adaptToOkta(promise);\n}\n\nfunction processWebAuthnResponse(inputFunction, context) {\n  if (typeof inputFunction === 'undefined') {\n    return null;\n  }\n  const responseValue = inputFunction.apply(context);\n  if (responseValue === undefined || responseValue === null) {\n    return null;\n  }\n  return JSON.stringify(responseValue);\n}\n\nexport default {\n  makeCredential: makeCredential,\n  getAssertion: getAssertion,\n  processWebAuthnResponse: processWebAuthnResponse,\n  isAvailable: function() {\n    return Object.prototype.hasOwnProperty.call(window, 'msCredentials');\n  },\n  isNewApiAvailable: function() {\n    // navigator.credentials is not supported in IE11\n    // eslint-disable-next-line compat/compat\n    return navigator && navigator.credentials && navigator.credentials.create;\n  },\n  isWebauthnOrU2fAvailable: function() {\n    return this.isNewApiAvailable() || FidoUtil.isU2fAvailable();\n  },\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Q from 'q';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport CryptoUtil from 'util/CryptoUtil';\nimport { WebauthnAbortError, WebAuthnError } from 'util/Errors';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport webauthn from 'util/webauthn';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\n\nfunction getExcludeCredentials(credentials) {\n  const excludeCredentials = [];\n\n  _.each(credentials, function(credential) {\n    excludeCredentials.push({\n      type: 'public-key',\n      id: CryptoUtil.strToBin(credential.id),\n    });\n  });\n  return excludeCredentials;\n}\n\nexport default FormController.extend({\n  className: 'enroll-webauthn',\n  Model: {\n    local: {\n      __enrolled__: 'boolean',\n    },\n\n    save: function() {\n      this.trigger('request');\n\n      if (this.get('__enrolled__')) {\n        return this.activate();\n      }\n\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'webauthn',\n          provider: 'FIDO',\n        });\n\n        return factor.enroll();\n      });\n    },\n\n    activate: function() {\n      this.set('__enrolled__', true);\n      this.trigger('errors:clear');\n      this.appState.on('backToFactors', () => {\n        if (this.webauthnAbortController) {\n          this.webauthnAbortController.abort();\n          this.webauthnAbortController = null;\n        }\n      });\n\n      return this.doTransaction(function(transaction) {\n        const activation = transaction.factor.activation;\n        // enroll via browser webauthn js\n\n        const self = this;\n\n        if (webauthn.isNewApiAvailable()) {\n          const options = _.extend({}, activation, {\n            challenge: CryptoUtil.strToBin(activation.challenge),\n            user: {\n              id: CryptoUtil.strToBin(activation.user.id),\n              name: activation.user.name,\n              displayName: activation.user.displayName,\n            },\n            excludeCredentials: getExcludeCredentials(activation.excludeCredentials),\n          });\n\n          // AbortController is not supported in IE11\n          if (typeof AbortController !== 'undefined') {\n            self.webauthnAbortController = new AbortController();\n          }\n          return new Q(\n            navigator.credentials.create({\n              publicKey: options,\n              signal: self.webauthnAbortController && self.webauthnAbortController.signal,\n            })\n          )\n            .then(function(newCredential) {\n              return transaction.activate({\n                attestation: CryptoUtil.binToStr(newCredential.response.attestationObject),\n                clientData: CryptoUtil.binToStr(newCredential.response.clientDataJSON),\n                // example data: [\"nfc\", \"usb\"]\n                transports: webauthn.processWebAuthnResponse(newCredential.response.getTransports,\n                  newCredential.response),\n                // example data: {\"credProps\":{\"rk\":true}}\n                clientExtensions: webauthn.processWebAuthnResponse(newCredential.getClientExtensionResults,\n                  newCredential)\n              });\n            })\n            .catch(function(error) {\n              self.trigger('errors:clear');\n              // Do not display if it is abort error triggered by code when switching.\n              // self.webauthnAbortController would be null if abort was triggered by code.\n              if (!self.webauthnAbortController) {\n                throw new WebauthnAbortError();\n              } else {\n                throw new WebAuthnError({\n                  xhr: { responseJSON: { errorSummary: error.message } },\n                });\n              }\n            })\n            .finally(function() {\n              // unset webauthnAbortController on successful authentication or error\n              self.webauthnAbortController = null;\n            });\n        }\n      });\n    },\n  },\n\n  Form: {\n    title: _.partial(loc, 'enroll.webauthn.biometric.title', 'login'),\n    save: _.partial(loc, 'enroll.webauthn.save', 'login'),\n    noCancelButton: true,\n    hasSavingState: false,\n    autoSave: true,\n    className: 'enroll-webauthn-form',\n    noButtonBar: function() {\n      return !webauthn.isNewApiAvailable();\n    },\n    modelEvents: {\n      request: '_startEnrollment',\n      error: '_stopEnrollment',\n    },\n    formChildren: function() {\n      const children = [];\n\n      if (webauthn.isNewApiAvailable()) {\n        //enroll.webauthn.biometric.instructions.edge is unescaped because it contains html\n        children.push(\n          FormType.View({\n            View: View.extend({\n              className: 'webauthn-enroll-text',\n              template: hbs(\n                '\\\n                <div class=\"webauthn-enroll-instructions\">\\\n                  <p>{{i18n code=\"enroll.webauthn.biometric.instructions\" bundle=\"login\"}}</p>\\\n                </div>\\\n                {{#if isEdge}}\\\n                  <div class=\"webauthn-edge-text\">\\\n                     <p>{{{i18n code=\"enroll.webauthn.biometric.instructions.edge\" bundle=\"login\"}}}</p>\\\n                  </div>\\\n                {{/if}}\\\n                {{#if onlySupportsSecurityKey}}\\\n                  <div class=\"webauthn-restrictions-text\">\\\n                     <p>{{{i18n code=\"enroll.webauthn.instructions.noSupportForBiometric\" bundle=\"login\"}}}</p>\\\n                  </div>\\\n                {{/if}}\\\n                <div data-se=\"webauthn-waiting\" class=\"okta-waiting-spinner hide\"></div>\\\n              '\n              ),\n              getTemplateData: function() {\n                return {\n                  isEdge: BrowserFeatures.isEdge(),\n                  onlySupportsSecurityKey: (BrowserFeatures.isFirefox() || BrowserFeatures.isSafari()) &&\n                    BrowserFeatures.isMac(),\n                };\n              },\n            }),\n          })\n        );\n      } else {\n        let errorMessageKey = 'webauthn.biometric.error.factorNotSupported';\n\n        if (this.options.appState.get('factors').length === 1) {\n          errorMessageKey = 'webauthn.biometric.error.factorNotSupported.oneFactor';\n        }\n        children.push(\n          FormType.View(\n            { View: new HtmlErrorMessageView({ message: loc(errorMessageKey, 'login') }) },\n            { selector: '.o-form-error-container' }\n          )\n        );\n      }\n\n      return children;\n    },\n\n    _startEnrollment: function() {\n      this.$('.okta-waiting-spinner').show();\n      this.$('.o-form-button-bar').hide();\n    },\n\n    _stopEnrollment: function() {\n      this.$('.okta-waiting-spinner').hide();\n      this.$('.o-form-button-bar').show();\n    },\n  },\n\n  Footer: Footer,\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate')) {\n      this.model.activate();\n      return true;\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nexport default View.extend({\n  className: 'okta-waiting-spinner',\n  attributes: {\n    'data-se': 'o-form-okta-waiting-spinner',\n  },\n  modelEvents: {\n    'spinner:show': 'show',\n    'spinner:hide': 'hide',\n  },\n\n  initialize: function(options) {\n    if (options && options.visible === false) {\n      this.hide();\n    }\n  },\n\n  show: function() {\n    this.$el.removeClass('hide');\n  },\n\n  hide: function() {\n    this.$el.addClass('hide');\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport webauthn from 'util/webauthn';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nimport Spinner from 'v1/views/shared/Spinner';\nexport default FormController.extend({\n  className: 'enroll-windows-hello',\n  Model: {\n    local: {\n      __isEnrolled__: 'boolean',\n    },\n\n    save: function() {\n      if (!webauthn.isAvailable()) {\n        return;\n      }\n\n      this.trigger('request');\n\n      if (this.get('__isEnrolled__')) {\n        return this.activate();\n      }\n\n      return this.doTransaction(function(transaction) {\n        return this._enroll(transaction);\n      });\n    },\n\n    _enroll: function(transaction) {\n      const factor = _.findWhere(transaction.factors, {\n        factorType: 'webauthn',\n        provider: 'FIDO',\n      });\n\n      return factor.enroll();\n    },\n\n    activate: function() {\n      this.set('__isEnrolled__', true);\n\n      return this.doTransaction(function(transaction) {\n        const activation = transaction.factor.activation;\n        const user = transaction.user;\n        const model = this;\n        const accountInfo = {\n          rpDisplayName: activation.rpDisplayName,\n          userDisplayName: user.profile.displayName,\n          accountName: user.profile.login,\n          userId: user.id,\n        };\n        const cryptoParams = [\n          {\n            algorithm: activation.algorithm,\n          },\n        ];\n        const challenge = activation.nonce;\n\n        return webauthn\n          .makeCredential(accountInfo, cryptoParams, challenge)\n          .then(function(creds) {\n            return transaction.activate({\n              credentialId: creds.credential.id,\n              publicKey: creds.publicKey,\n              attestation: null,\n            });\n          })\n          .catch(function(error) {\n            switch (error.message) {\n            case 'AbortError':\n            case 'NotFoundError':\n            case 'NotSupportedError':\n              model.trigger('abort', error.message);\n              return transaction;\n            }\n\n            throw error;\n          });\n      });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    hasSavingState: false,\n    title: _.partial(loc, 'enroll.windowsHello.title', 'login'),\n    subtitle: function() {\n      return webauthn.isAvailable() ? loc('enroll.windowsHello.subtitle', 'login') : '';\n    },\n    save: _.partial(loc, 'enroll.windowsHello.save', 'login'),\n\n    customSavingState: {\n      stop: 'abort',\n    },\n\n    modelEvents: function() {\n      if (!webauthn.isAvailable()) {\n        return {};\n      }\n\n      return {\n        request: '_startEnrollment',\n        error: '_stopEnrollment',\n        abort: '_stopEnrollment',\n      };\n    },\n\n    noButtonBar: function() {\n      return !webauthn.isAvailable();\n    },\n\n    formChildren: function() {\n      const result = [];\n\n      if (!webauthn.isAvailable()) {\n        result.push(\n          FormType.View(\n            { View: new HtmlErrorMessageView({ message: loc('enroll.windowsHello.error.notWindows', 'login') }) },\n            { selector: '.o-form-error-container' }\n          )\n        );\n      }\n\n      result.push(FormType.View({ View: new Spinner({ model: this.model, visible: false }) }));\n\n      return result;\n    },\n\n    _startEnrollment: function() {\n      this.subtitle = loc('enroll.windowsHello.subtitle.loading', 'login');\n\n      this.model.trigger('spinner:show');\n      this._resetErrorMessage();\n\n      this.render();\n      this.$('.o-form-button-bar').addClass('hide');\n    },\n\n    _stopEnrollment: function(errorMessage) {\n      this.subtitle = loc('enroll.windowsHello.subtitle', 'login');\n\n      this.model.trigger('spinner:hide');\n\n      let message;\n\n      switch (errorMessage) {\n      case 'NotSupportedError':\n        message = loc('enroll.windowsHello.error.notConfiguredHtml', 'login');\n        break;\n      }\n\n      this._resetErrorMessage();\n\n      if (message) {\n        const messageView = new HtmlErrorMessageView({\n          message: message,\n        });\n\n        this.$('.o-form-error-container').addClass('o-form-has-errors');\n        this.add(messageView, { selector: '.o-form-error-container' });\n        this._errorMessageView = this.last();\n      }\n\n      this.render();\n      this.$('.o-form-button-bar').removeClass('hide');\n    },\n\n    _resetErrorMessage: function() {\n      this._errorMessageView && this._errorMessageView.remove();\n      this._errorMessageView = undefined;\n      this.clearErrors();\n    },\n  },\n\n  Footer: Footer,\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate')) {\n      this.model.activate();\n      return true;\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Footer from 'v1/views/enroll-factors/Footer';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default FormController.extend({\n  className: 'enroll-yubikey',\n  Model: {\n    props: {\n      passCode: ['string', true],\n      factorId: 'string',\n    },\n    save: function() {\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'token:hardware',\n          provider: 'YUBICO',\n        });\n\n        return factor.enroll({\n          passCode: this.get('passCode'),\n        });\n      });\n    },\n  },\n\n  Form: {\n    title: _.partial(loc, 'enroll.yubikey.title', 'login'),\n    subtitle: _.partial(loc, 'enroll.yubikey.subtitle', 'login'),\n    noCancelButton: true,\n    save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n    autoSave: true,\n    className: 'enroll-yubikey',\n    formChildren: [\n      FormType.View({\n        View: '<div class=\"yubikey-demo\" data-type=\"yubikey-example\"></div>',\n      }),\n      FormType.Input({\n        name: 'passCode',\n        input: TextBox,\n        type: 'password',\n      }),\n    ],\n  },\n\n  Footer: Footer,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport CountryUtil from 'util/CountryUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport RouterUtil from 'v1/util/RouterUtil';\nconst PUSH_INTERVAL = 6000;\n\n// Note: Keep-alive is set to 5 seconds - using 5 seconds here will result\n// in network connection lost errors in Safari and IE.\n\nconst EnrollmentLinkSentControllerFooter = View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help js-back\" data-se=\"back-link\">\\\n        {{i18n code=\"oform.back\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .js-back': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n  },\n  back: function() {\n    const url = RouterUtil.createActivateFactorUrl(\n      this.options.appState.get('activatedFactorProvider'),\n      this.options.appState.get('activatedFactorType'),\n      'manual'\n    );\n\n    this.options.appState.trigger('navigate', url);\n  },\n});\nconst emailSentForm = {\n  title: _.partial(loc, 'enroll.totp.enrollViaEmail.title', 'login'),\n  noButtonBar: true,\n  attributes: { 'data-se': 'sent-email-activation-link' },\n  formChildren: [\n    FormType.View({\n      View: View.extend({\n        template: hbs(\n          '\\\n            <p>{{i18n code=\"enroll.totp.enrollViaEmail.msg\" bundle=\"login\"}}</p>\\\n            <p class=\"email-address\">{{email}}</p>\\\n          '\n        ),\n        getTemplateData: function() {\n          return { email: this.options.appState.get('userEmail') };\n        },\n      }),\n    }),\n  ],\n};\nconst smsSentForm = {\n  title: _.partial(loc, 'enroll.totp.enrollViaSms.title', 'login'),\n  noButtonBar: true,\n  attributes: { 'data-se': 'sent-sms-activation-link' },\n  formChildren: [\n    FormType.View({\n      View: View.extend({\n        template: hbs(\n          '\\\n            <p>{{i18n code=\"enroll.totp.enrollViaSms.msg\" bundle=\"login\"}}</p>\\\n            <p class=\"phone-number\">{{phoneNumber}}</p>\\\n          '\n        ),\n        getTemplateData: function() {\n          return { phoneNumber: this.model.get('fullPhoneNumber') };\n        },\n      }),\n    }),\n  ],\n};\nexport default FormController.extend({\n  className: 'enroll-activation-link-sent',\n  Model: function() {\n    return {\n      local: {\n        countryCode: ['string', false, this.options.appState.get('userCountryCode')],\n        phoneNumber: ['string', false, this.options.appState.get('userPhoneNumber')],\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n      derived: {\n        countryCallingCode: {\n          deps: ['countryCode'],\n          fn: function(countryCode) {\n            return '+' + CountryUtil.getCallingCodeForCountry(countryCode);\n          },\n        },\n        fullPhoneNumber: {\n          deps: ['countryCallingCode', 'phoneNumber'],\n          fn: function(countryCallingCode, phoneNumber) {\n            return countryCallingCode + phoneNumber;\n          },\n        },\n      },\n    };\n  },\n\n  Form: function() {\n    const activationType = this.options.appState.get('factorActivationType');\n\n    switch (activationType) {\n    case 'SMS':\n      return smsSentForm;\n    case 'EMAIL':\n      return emailSentForm;\n    default:\n      throw new Error('Unknown activation option: ' + activationType);\n    }\n  },\n\n  Footer: EnrollmentLinkSentControllerFooter,\n\n  initialize: function() {\n    this.pollForEnrollment();\n  },\n\n  remove: function() {\n    return FormController.prototype.remove.apply(this, arguments);\n  },\n\n  pollForEnrollment: function() {\n    return this.model.doTransaction(function(transaction) {\n      return transaction.poll(PUSH_INTERVAL);\n    });\n  },\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isWaitingForActivation')) {\n      this.pollForEnrollment();\n      return true;\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FormController from 'v1/util/FormController';\nimport RouterUtil from 'v1/util/RouterUtil';\nimport EnterPasscodeForm from 'v1/views/enroll-factors/EnterPasscodeForm';\nconst EnterPasscodePushFlowControllerFooter = View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help js-back\" data-se=\"back-link\">\\\n        {{i18n code=\"oform.back\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .js-back': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n  },\n  back: function() {\n    const url = RouterUtil.createActivateFactorUrl(\n      this.options.appState.get('activatedFactorProvider'),\n      'push',\n      'manual'\n    );\n\n    this.options.appState.trigger('navigate', url);\n  },\n});\nexport default FormController.extend({\n  className: 'activate-push',\n  Model: function() {\n    return {\n      props: {\n        factorId: ['string', true, this.options.appState.get('activatedFactorId')],\n        passCode: ['string', true],\n      },\n      local: {\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n      save: function() {\n        return this.doTransaction(function(transaction) {\n          return transaction.activate({\n            passCode: this.get('passCode'),\n          });\n        });\n      },\n    };\n  },\n\n  Form: EnterPasscodeForm,\n\n  Footer: EnterPasscodePushFlowControllerFooter,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nexport default View.extend({\n  template: hbs(\n    '\\\n      <div class=\"infobox\">\\\n        <span class=\"icon info-16\"></span>\\\n        <p>{{i18n code=\"contact.support\" bundle=\"login\" arguments=\"helpSupportNumber\"}}</p>\\\n      </div>'\n  ),\n  className: 'contact-support',\n\n  getTemplateData: function() {\n    return this.settings.pick('helpSupportNumber');\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport ValidationUtil from 'v1/util/ValidationUtil';\nimport ContactSupport from 'v1/views/shared/ContactSupport';\nimport TextBox from 'v1/views/shared/TextBox';\nconst ForgotPasswordControllernoFactorsError = View.extend({\n  template: hbs`\n      <div class=\"okta-form-infobox-error infobox infobox-error\" role=\"alert\">\n        <span class=\"icon error-16\"></span>\n        <p>{{i18n code=\"password.forgot.noFactorsEnabled\" bundle=\"login\"}}</p>\n      </div>\n    `,\n});\nconst ForgotPasswordControllerFooter = View.extend({\n  template: hbs(\n    '\\\n      {{#unless hideBackToSignInForReset}}\\\n        <a href=\"#\" class=\"link help js-back\" data-se=\"back-link\">\\\n          {{i18n code=\"goback\" bundle=\"login\"}}\\\n        </a>\\\n      {{/unless}}\\\n      {{#if helpSupportNumber}}\\\n      <a href=\"#\" class=\"link goto js-contact-support\">\\\n        {{i18n code=\"mfa.noAccessToEmail\" bundle=\"login\"}}\\\n      </a>\\\n      {{/if}}\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .js-back': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n    'click .js-contact-support': function(e) {\n      e.preventDefault();\n      this.state.trigger('contactSupport');\n      this.$('.js-contact-support').hide();\n    },\n  },\n  getTemplateData: function() {\n    return {\n      hideBackToSignInForReset: this.settings.get('features.hideBackToSignInForReset'),\n      helpSupportNumber: this.settings.get('helpSupportNumber'),\n    };\n  },\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    this.options.appState.trigger('navigate', '');\n  },\n});\nexport default FormController.extend({\n  className: 'forgot-password',\n  Model: {\n    props: {\n      username: ['string', true],\n      factorType: ['string', true],\n    },\n    validate: function() {\n      return ValidationUtil.validateUsername(this);\n    },\n    save: function() {\n      const self = this;\n      const relayState = this.settings.get('relayState');\n\n      this.startTransaction(function(authClient) {\n        return authClient.forgotPassword({\n          username: self.settings.transformUsername(self.get('username'), Enums.FORGOT_PASSWORD),\n          factorType: self.get('factorType'),\n          relayState: relayState,\n        });\n      }).catch(function() {\n        //need empty fail handler on model to display errors on form\n      });\n    },\n  },\n  Form: {\n    noButtonBar: true,\n    title: _.partial(loc, 'password.reset', 'login'),\n    formChildren: function() {\n      const smsEnabled = this.settings.get('features.smsRecovery');\n      /*eslint complexity: [2, 9] max-statements: [2, 23] */\n\n      const callEnabled = this.settings.get('features.callRecovery');\n      const emailEnabled = this.settings.get('features.emailRecovery');\n      const noFactorsEnabled = !(smsEnabled || callEnabled || emailEnabled);\n      const formChildren = [];\n\n      if (noFactorsEnabled) {\n        this.add(ForgotPasswordControllernoFactorsError, '.o-form-error-container');\n      } else {\n        formChildren.push(\n          FormType.Input({\n            label: loc('password.forgot.email.or.username.placeholder', 'login'),\n            'label-top': true,\n            explain: Util.createInputExplain(\n              'password.forgot.email.or.username.tooltip',\n              'password.forgot.email.or.username.placeholder',\n              'login'\n            ),\n            'explain-top': true,\n            name: 'username',\n            input: TextBox,\n            inputId: 'account-recovery-username',\n            autoComplete: Util.getAutocompleteValue(this.settings, 'username'),\n            type: 'text',\n            inlineValidation: false,\n          })\n        );\n        if (smsEnabled || callEnabled) {\n          formChildren.push(\n            FormType.View({\n              View: View.extend({\n                template: hbs(\n                  '\\\n                  <p class=\"mobile-recovery-hint\">\\\n                    {{i18n code=\"recovery.mobile.hint\" bundle=\"login\" arguments=\"mobileFactors\"}}\\\n                  </p>'\n                ),\n                getTemplateData: function() {\n                  let mobileFactors;\n\n                  if (smsEnabled && callEnabled) {\n                    mobileFactors = loc('recovery.smsOrCall');\n                  } else if (callEnabled) {\n                    mobileFactors = loc('recovery.call');\n                  } else {\n                    mobileFactors = loc('recovery.sms');\n                  }\n                  return { mobileFactors: mobileFactors };\n                },\n              }),\n            })\n          );\n        }\n        if (smsEnabled) {\n          this.$el.addClass('forgot-password-sms-enabled');\n          formChildren.push(\n            this.createRecoveryFactorButton(\n              'sms-button',\n              'password.forgot.sendText',\n              Enums.RECOVERY_FACTOR_TYPE_SMS,\n              this\n            )\n          );\n          this.setDefaultFactorType(Enums.RECOVERY_FACTOR_TYPE_SMS);\n        }\n        if (callEnabled) {\n          this.$el.addClass('forgot-password-call-enabled');\n          formChildren.push(\n            this.createRecoveryFactorButton(\n              'call-button',\n              'password.forgot.call',\n              Enums.RECOVERY_FACTOR_TYPE_CALL,\n              this\n            )\n          );\n          this.setDefaultFactorType(Enums.RECOVERY_FACTOR_TYPE_CALL);\n        }\n        if (emailEnabled) {\n          this.$el.addClass('forgot-password-email-enabled');\n          formChildren.push(\n            this.createRecoveryFactorButton(\n              'email-button',\n              'password.forgot.sendEmail',\n              Enums.RECOVERY_FACTOR_TYPE_EMAIL,\n              this\n            )\n          );\n          this.setDefaultFactorType(Enums.RECOVERY_FACTOR_TYPE_EMAIL);\n        }\n      }\n\n      return formChildren;\n    },\n    initialize: function() {\n      this.listenTo(this.state, 'contactSupport', function() {\n        this.add(ContactSupport, '.o-form-error-container');\n      });\n\n      this.listenTo(this, 'save', function() {\n        this.options.appState.set('username', this.model.get('username'));\n        this.model.save();\n      });\n    },\n    setDefaultFactorType: function(factorType) {\n      if (_.isEmpty(this.model.get('factorType'))) {\n        this.model.set('factorType', factorType);\n      }\n    },\n    createRecoveryFactorButton: function(className, labelCode, factorType, form) {\n      return FormType.Button({\n        attributes: { 'data-se': className },\n        className: 'button button-primary button-wide ' + className,\n        title: loc(labelCode, 'login'),\n        click: function() {\n          form.clearErrors();\n          if (this.model.isValid()) {\n            this.model.set('factorType', factorType);\n            form.trigger('save', this.model);\n          }\n        },\n      });\n    },\n  },\n  Footer: ForgotPasswordControllerFooter,\n\n  initialize: function() {\n    this.options.appState.unset('username');\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { internal } from '@okta/courage';\nconst Cookie = internal.util.Cookie;\nconst LAST_USERNAME_COOKIE_NAME = 'ln';\nconst DAYS_SAVE_REMEMBER = 365;\nconst fn = {};\n\nfn.getCookieUsername = function() {\n  return Cookie.getCookie(LAST_USERNAME_COOKIE_NAME);\n};\n\nfn.setUsernameCookie = function(username) {\n  Cookie.setCookie(LAST_USERNAME_COOKIE_NAME, username, {\n    expires: DAYS_SAVE_REMEMBER,\n    path: '/',\n  });\n};\n\nfn.removeUsernameCookie = function() {\n  Cookie.removeCookie(LAST_USERNAME_COOKIE_NAME, { path: '/' });\n};\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, Model } from '@okta/courage';\nimport CookieUtil from 'util/CookieUtil';\nimport Enums from 'util/Enums';\nimport BaseLoginModel from './BaseLoginModel';\n\nexport default BaseLoginModel.extend({\n  props: function() {\n    const cookieUsername = CookieUtil.getCookieUsername();\n    const properties = this.getUsernameAndRemember(cookieUsername);\n    const props = {\n      username: {\n        type: 'string',\n        validate: function(value) {\n          if (_.isEmpty(value)) {\n            return loc('error.username.required', 'login');\n          }\n        },\n        value: properties.username,\n      },\n      lastUsername: ['string', false, cookieUsername],\n      context: ['object', false],\n      remember: ['boolean', true, properties.remember],\n      multiOptionalFactorEnroll: ['boolean', true],\n    };\n\n    if (!(this.settings && this.settings.get('features.passwordlessAuth'))) {\n      props.password = {\n        type: 'string',\n        validate: function(value) {\n          if (_.isEmpty(value)) {\n            return loc('error.password.required', 'login');\n          }\n        },\n      };\n    }\n    return props;\n  },\n\n  getUsernameAndRemember: function(cookieUsername) {\n    const settingsUsername = this.settings && this.settings.get('username');\n    const rememberMeEnabled = this.settings && this.settings.get('features.rememberMe');\n    let remember = false;\n    let username;\n\n    if (settingsUsername) {\n      username = settingsUsername;\n      remember = rememberMeEnabled && username === cookieUsername;\n    } else if (rememberMeEnabled && cookieUsername) {\n      // Only respect the cookie if the feature is enabled.\n      // Allows us to force prompting when necessary, e.g. SAML ForceAuthn\n      username = cookieUsername;\n      remember = true;\n    }\n\n    return {\n      username: username,\n      remember: remember,\n    };\n  },\n\n  constructor: function(options) {\n    this.settings = options && options.settings;\n    this.appState = options && options.appState;\n    Model.apply(this, arguments);\n    this.listenTo(this, 'change:username', function(model, username) {\n      this.set({ remember: username === this.get('lastUsername') });\n    });\n  },\n  parse: function(options) {\n    return _.omit(options, ['settings', 'appState']);\n  },\n\n  save: function() {\n    const username = this.settings.transformUsername(this.get('username'), Enums.PRIMARY_AUTH);\n    const remember = this.get('remember');\n    const lastUsername = this.get('lastUsername');\n\n    this.setUsernameCookie(username, remember, lastUsername);\n\n    //the 'save' event here is triggered and used in the BaseLoginController\n    //to disable the primary button on the primary auth form\n    this.trigger('save');\n\n    this.appState.trigger('loading', true);\n\n    const signInArgs = this.getSignInArgs(username);\n    let primaryAuthPromise;\n\n    if (this.appState.get('isUnauthenticated')) {\n      const authClient = this.appState.settings.getAuthClient();\n\n      // bootstrapped with stateToken\n      if (this.appState.get('isIdxStateToken')) {\n        // if its an idx stateToken, we send the parameter as identifier to login API\n        primaryAuthPromise = this.doTransaction(function(transaction) {\n          return this.doPrimaryAuth(authClient, signInArgs, transaction.login);\n        });\n      } else {\n        primaryAuthPromise = this.doTransaction(function(transaction) {\n          return this.doPrimaryAuth(authClient, signInArgs, transaction.authenticate);\n        }, true);\n      }\n    } else {\n      //normal username/password flow without stateToken\n      primaryAuthPromise = this.startTransaction(function(authClient) {\n        return this.doPrimaryAuth(authClient, signInArgs, _.bind(authClient.signInWithCredentials, authClient));\n      });\n    }\n\n    return primaryAuthPromise\n      .catch(() => {\n        // Specific event handled by the Header for the case where the security image is not\n        // enabled and we want to show a spinner. (Triggered only here and handled only by Header).\n        this.appState.trigger('removeLoading');\n        CookieUtil.removeUsernameCookie();\n      })\n      .finally(() => {\n        this.appState.trigger('loading', false);\n      });\n  },\n\n  getSignInArgs: function(username) {\n    const multiOptionalFactorEnroll = this.get('multiOptionalFactorEnroll');\n    const signInArgs = {};\n\n    if (!this.settings.get('features.passwordlessAuth')) {\n      signInArgs.password = this.get('password');\n    }\n\n    // if its an idx stateToken, we send the parameter as identifier to login API\n    if (this.appState.get('isIdxStateToken')) {\n      signInArgs.identifier = username;\n    } else {\n      //only post options param for non-idx flows\n      signInArgs.username = username;\n      signInArgs.options = {\n        warnBeforePasswordExpired: true,\n        multiOptionalFactorEnroll: multiOptionalFactorEnroll,\n      };\n    }\n    return signInArgs;\n  },\n\n  setUsernameCookie: function(username, remember, lastUsername) {\n    // Do not modify the cookie when feature is disabled, relevant for SAML ForceAuthn prompts\n    if (this.settings.get('features.rememberMe')) {\n      // Only delete the cookie if its owner says so. This allows other\n      // users to log in on a one-off basis.\n      if (!remember && lastUsername === username) {\n        CookieUtil.removeUsernameCookie();\n      } else if (remember) {\n        CookieUtil.setUsernameCookie(username);\n      }\n    }\n  },\n\n  doPrimaryAuth: function(authClient, signInArgs, func) {\n    const deviceFingerprintEnabled = this.settings.get('features.deviceFingerprinting');\n    const typingPatternEnabled = this.settings.get('features.trackTypingPattern');\n\n    // Add the custom header for fingerprint, typing pattern if needed, and then remove it afterwards\n    // Since we only need to send it for primary auth\n    if (deviceFingerprintEnabled && this.appState.get('deviceFingerprint')) {\n      authClient.http.setRequestHeader('X-Device-Fingerprint', this.appState.get('deviceFingerprint'));\n    }\n    if (typingPatternEnabled && this.appState.get('typingPattern')) {\n      authClient.http.setRequestHeader('X-Typing-Pattern', this.appState.get('typingPattern'));\n    }\n\n    const self = this;\n\n    return func(signInArgs).finally(function() {\n      if (deviceFingerprintEnabled) {\n        authClient.http.setRequestHeader('X-Device-Fingerprint', undefined);\n        self.appState.unset('deviceFingerprint'); //Fingerprint can only be used once\n      }\n      if (typingPatternEnabled) {\n        authClient.http.setRequestHeader('X-Typing-Pattern', undefined);\n        self.appState.unset('typingPattern');\n      }\n    });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { $ } from '@okta/courage';\nimport Q from 'q';\nexport default {\n  getUserAgent: function() {\n    return navigator.userAgent;\n  },\n  isMessageFromCorrectSource: function($iframe, event) {\n    return event.source === $iframe[0].contentWindow;\n  },\n  generateDeviceFingerprint: function(oktaDomainUrl, element) {\n    const userAgent = this.getUserAgent();\n\n    if (!userAgent) {\n      return Q.reject('user agent is not defined');\n    } else if (isWindowsPhone(userAgent)) {\n      return Q.reject('device fingerprint is not supported on Windows phones');\n    }\n\n    const deferred = Q.defer();\n    const self = this;\n    let $iframe;\n    let iFrameTimeout;\n\n    function isWindowsPhone(userAgent) {\n      return userAgent.match(/windows phone|iemobile|wpdesktop/i);\n    }\n\n    function removeIframe() {\n      $iframe.off();\n      $iframe.remove();\n      window.removeEventListener('message', onMessageReceivedFromOkta, false);\n    }\n\n    function handleError(reason) {\n      removeIframe();\n      deferred.reject(reason);\n    }\n\n    function onMessageReceivedFromOkta(event) {\n      if (!self.isMessageFromCorrectSource($iframe, event)) {\n        return;\n      }\n      // deviceFingerprint service is available, clear timeout\n      clearTimeout(iFrameTimeout);\n      if (!event || !event.data || event.origin !== oktaDomainUrl) {\n        handleError('no data');\n        return;\n      }\n      try {\n        const message = JSON.parse(event.data);\n\n        if (message && message.type === 'FingerprintServiceReady') {\n          sendMessageToOkta({ type: 'GetFingerprint' });\n        } else if (message && message.type === 'FingerprintAvailable') {\n          removeIframe();\n          deferred.resolve(message.fingerprint);\n        } else {\n          handleError('no data');\n        }\n      } catch (error) {\n        //Ignore any errors since we could get other messages too\n      }\n    }\n\n    function sendMessageToOkta(message) {\n      const win = $iframe[0].contentWindow;\n\n      if (win) {\n        win.postMessage(JSON.stringify(message), oktaDomainUrl);\n      }\n    }\n\n    // Attach listener\n    window.addEventListener('message', onMessageReceivedFromOkta, false);\n    // Create and Load devicefingerprint page inside the iframe\n    $iframe = $('<iframe>', {\n      css: {\n        display: 'none'\n      },\n      src: oktaDomainUrl + '/auth/services/devicefingerprint',\n    });\n    element.append($iframe);\n\n    iFrameTimeout = setTimeout(() => {\n      // If the iFrame does not load, throw an error\n      handleError('service not available');\n    }, 2000);\n\n    return deferred.promise;\n  },\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, $, View, loc, createButton, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport OAuth2Util from 'util/OAuth2Util';\nconst SharedUtil = internal.util.Util;\nconst dividerTpl = hbs('<div class=\"auth-divider\">\\\n      <span class=\"auth-divider-text\">{{text}}</span>\\\n    </div>');\nconst formTitleTpl = hbs('<h2 data-se=\"o-form-head\" class=\"okta-form-title o-form-head\">{{title}}</h2>');\nexport default View.extend({\n  className: 'primary-auth-container',\n\n  children: function() {\n    const children = [];\n    const socialIdpButtons = this.settings.get('configuredSocialIdps');\n    const pivButton = this.settings.get('piv');\n    const customButtons = this.settings.get('customButtons');\n    const divider = dividerTpl({ text: loc('socialauth.divider.text', 'login') });\n\n    if (this.settings.get('hasPivCard')) {\n      children.push(this._createPivButton(pivButton));\n    }\n\n    _.each(\n      socialIdpButtons,\n      function(button) {\n        children.push(this._createSocialIdpButton(button));\n      },\n      this\n    );\n\n    _.each(\n      customButtons,\n      function(button) {\n        children.push(this._createCustomButton(button));\n      },\n      this\n    );\n\n    // If the social auth buttons have to be above the Okta form, the title moves from\n    // primary auth form to the social auth (above the buttons) and the divider goes below\n    // the buttons (in between social auth and primary auth). If social auth needs to go below\n    // Okta form, just add the divider at the top of the social auth container. The title still\n    // lives in primary auth form.\n    if (this.settings.get('socialAuthPositionTop')) {\n      children.unshift(formTitleTpl({ title: loc('primaryauth.title', 'login') }));\n      // Divider between Primary Auth and the Social Auth\n      children.push(divider);\n    } else {\n      children.unshift(divider);\n    }\n\n    return children;\n  },\n\n  _createSocialIdpButton: function(options) {\n    return createButton({\n      attributes: {\n        'data-se': options.dataAttr,\n      },\n      className: options.className,\n      title: function() {\n        return options.text || loc(options.i18nKey);\n      },\n      click: function(e) {\n        e.preventDefault();\n        if (this.settings.get('oauth2Enabled')) {\n          OAuth2Util.getTokens(this.settings, { idp: options.id }, this.options.currentController);\n        } else {\n          const baseUrl = this.settings.get('baseUrl');\n          let params;\n          const lastAuthResponse = this.options.appState.get('lastAuthResponse');\n          if (this.options.appState.get('usingDeviceFlow')) {\n            params = $.param({\n              stateToken: lastAuthResponse?.stateToken,\n            });\n          } else {\n            params = $.param({\n              fromURI: this.settings.get('relayState'),\n            });\n          }\n          const targetUri = `${baseUrl}/sso/idps/${options.id}?${params}`;\n          SharedUtil.redirect(targetUri);\n        }\n      },\n    });\n  },\n\n  _createPivButton: function(options) {\n    let className = options.className || '';\n    return createButton({\n      attributes: {\n        'data-se': 'piv-card-button',\n      },\n      className: className + ' piv-button',\n      title: options.text || loc('piv.cac.card', 'login'),\n      click: function(e) {\n        e.preventDefault();\n        this.options.appState.trigger('navigate', 'signin/verify/piv');\n      },\n    });\n  },\n\n  _createCustomButton: function(options) {\n    return createButton({\n      attributes: {\n        'data-se': options.dataAttr,\n      },\n      className: options.className + ' default-custom-button',\n      title: function() {\n        return options.title || loc(options.i18nKey);\n      },\n      click: options.click,\n    });\n  },\n});\n","/*\n * Checking in as there is no npm module to consume. \n * Current version is 2.15.\n * Repo - https://github.com/TypingDNA/TypingDnaRecorder-JavaScript\n */\n\n/**\n * TypingDNA - Typing Biometrics JavaScript API\n * https://api.typingdna.com/scripts/typingdna.js\n * https://typingdna.com/scripts/typingdna.js (alternative)\n *\n * @version 2.15\n * @author Raul Popa\n * @copyright SC TypingDNA SRL, http://typingdna.com\n * @license http://www.apache.org/licenses/LICENSE-2.0\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Typical usage:\n * var tdna = new TypingDNA(); // creates a new TypingDNA object and starts recording\n * var typingPattern = tdna.getTypingPattern({type=1, text=\"Hello5g21?*\"});\n * returns a type 1 typing pattern (and continues recording afterwards)\n *\n * Optional:\n * tdna.stop(); // ends recording and clears history stack (returns recording flag: false)\n * tdna.start(); // restarts the recording after a stop (returns recording flag: true)\n * tdna.reset(); // restarts the recording anytime, clears history stack and starts from scratch (returns nothing)\n * var typingPatternQuality = TypingDNA.getQuality(typingPattern); //returns the quality/strength of any typing pattern\n * (there is no need to initialize the class to do pattern quality checking)\n */\n\n/**\n * Creates a single instance (or a reference) of the TypingDNA class\n * @return {Object} Returns the single instance of the TypingDNA class.\n * @example var tdna = new TypingDNA();\n */\nmodule.exports = function TypingDNA() {\n  if (TypingDNA.initialized != true) {\n    TypingDNA.prototype.start = function() {\n      return TypingDNA.start.apply(this, arguments);\n    }\n    TypingDNA.prototype.stop = function() {\n      return TypingDNA.stop.apply(this, arguments);\n    }\n    TypingDNA.prototype.reset = function() {\n      return TypingDNA.reset.apply(this, arguments);\n    }\n    TypingDNA.prototype.addTarget = function() {\n      return TypingDNA.addTarget.apply(this, arguments);\n    }\n    TypingDNA.prototype.removeTarget = function() {\n      return TypingDNA.removeTarget.apply(this, arguments);\n    }\n    TypingDNA.prototype.getTypingPattern = function() {\n      return TypingDNA.getTypingPattern.apply(this, arguments);\n    }\n    TypingDNA.prototype.get = function() {\n      // still works but will be deprecated in favor of getTypignPattern()\n      return TypingDNA.get.apply(this, arguments);\n    }\n    TypingDNA.prototype.startDiagram = function() {\n      // deprecated in favor of start()\n      //return TypingDNA.startDiagram.apply(this, arguments);\n    }\n    TypingDNA.prototype.stopDiagram = function() {\n      // deprecated in favor of stop()\n      //return TypingDNA.stopDiagram.apply(this, arguments);\n    }\n    TypingDNA.prototype.getDiagram = function() {\n      // still works but will be deprecated in favor of getTypignPattern()\n      return TypingDNA.getDiagram.apply(this, arguments);\n    }\n    TypingDNA.prototype.getExtendedDiagram = function() {\n      // still works but will be deprecated in favor of getTypignPattern()\n      return TypingDNA.getExtendedDiagram.apply(this, arguments);\n    }\n    TypingDNA.prototype.getMouseDiagram = function() {\n      return TypingDNA.getMouseDiagram.apply(this, arguments);\n    }\n    TypingDNA.prototype.startMouse = function() {\n      return TypingDNA.startMouse.apply(this, arguments);\n    }\n    TypingDNA.prototype.stopMouse = function() {\n      return TypingDNA.stopMouse.apply(this, arguments);\n    }\n    TypingDNA.prototype.getQuality = function() {\n      return TypingDNA.getQuality.apply(this, arguments);\n    }\n    TypingDNA.prototype.getLength = function() {\n      return TypingDNA.getLength.apply(this, arguments);\n    }\n    TypingDNA.prototype.isMobile = function() {\n      return TypingDNA.isMobile.apply(this, arguments);\n    }\n    TypingDNA.prototype.getTextId = function() {\n      return TypingDNA.getTextId.apply(this, arguments)\n    }\n    TypingDNA.initialized = true;\n    TypingDNA.prototype.maxHistoryLength = TypingDNA.maxHistoryLength;\n    TypingDNA.prototype.defaultHistoryLength = TypingDNA.defaultHistoryLength;\n    TypingDNA.prototype.maxSeekTime = TypingDNA.maxSeekTime;\n    TypingDNA.prototype.maxPressTime = TypingDNA.maxPressTime;\n    TypingDNA.version = 2.15;\n    TypingDNA.flags = 0;\n    TypingDNA.instance = this;\n    TypingDNA.document = document;\n    TypingDNA.maxHistoryLength = 2000;\n    TypingDNA.maxSeekTime = 1500;\n    TypingDNA.maxPressTime = 300;\n    TypingDNA.defaultHistoryLength = 160;\n    TypingDNA.spKeyCodes = [8, 13, 32];\n    TypingDNA.spKeyCodesObj = {\n      8: 1,\n      13: 1,\n      32: 1\n    };\n    TypingDNA.keyCodes = [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 32, 222, 188, 190, 186, 187, 189, 191, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57];\n    TypingDNA.keyCodesObj = {}\n    for (var i in TypingDNA.keyCodes) {\n      TypingDNA.keyCodesObj[TypingDNA.keyCodes[i]] = 1;\n    }\n    TypingDNA.pt1 = TypingDNA.ut1 = (new Date).getTime();\n    TypingDNA.wfk = [];\n    TypingDNA.sti = [];\n    TypingDNA.skt = [];\n    TypingDNA.recording = true;\n    TypingDNA.mouseRecording = true;\n    TypingDNA.mouseMoveRecording = false;\n    TypingDNA.spKeyRecording = true;\n    TypingDNA.diagramRecording = true;\n    TypingDNA.dwfk = [];\n    TypingDNA.dsti = [];\n    TypingDNA.dskt = [];\n    TypingDNA.drkc = [];\n    TypingDNA.dlastDownKey;\n    TypingDNA.prevKeyCode = 0;\n    TypingDNA.maxMoveDeltaTime = 600;\n    TypingDNA.maxScrollDeltaTime = 800;\n    TypingDNA.maxStopTime = 1500;\n    TypingDNA.maxClickTime = 600;\n    TypingDNA.maxMouseHistoryLength = 500;\n    TypingDNA.lastMouseMoveTime = TypingDNA.lastMouseDownTime = (new Date).getTime();\n    TypingDNA.stopTimes = [];\n    TypingDNA.clickTimes = [];\n    TypingDNA.lastMouseStop = true;\n    TypingDNA.zl = 0.0000001;\n    TypingDNA.isAndroidChrome = false;\n    TypingDNA.ACLastTime = (new Date).getTime();\n    TypingDNA.ACSeekTime = 0;\n    TypingDNA.ACPressTime = 0;\n    TypingDNA.ACLastCharCode = 0;\n    TypingDNA.ACLastKeyCode = 0;\n    TypingDNA.ACInputLengths = {\n      inputs: [],\n      lastLength: [],\n    };\n    TypingDNA.ACPreviousKeyCode = 0;\n    TypingDNA.targetIds = [];\n    TypingDNA.lastTarget = \"\";\n    TypingDNA.lastTargetFound = false;\n    TypingDNA.replaceMissingKeys = true;\n    TypingDNA.replaceMissingKeysPerc = 7;\n\n    TypingDNA.keyDown = function(e) {\n      if (!TypingDNA.recording && !TypingDNA.diagramRecording) {\n        return;\n      }\n      if (!TypingDNA.isTarget(e.target.id)) {\n        return;\n      }\n      var keyCode = e.keyCode;\n      if (TypingDNA.wfk[keyCode] == 1 || TypingDNA.dwfk[keyCode] == 1) {\n        //return;\n      }\n      if (keyCode == 229 && TypingDNA.isMobile() && !TypingDNA.isAndroidChrome) {\n        TypingDNA.isAndroidChrome = true;\n\n        TypingDNA.ACSeekTime = (new Date).getTime() - TypingDNA.ACLastTime;\n        TypingDNA.ACLastTime = (new Date).getTime();\n\n        TypingDNA.document.removeEventListener(\"keydown\", TypingDNA.keyDown);\n        TypingDNA.document.removeEventListener(\"keyup\", TypingDNA.keyUp);\n        TypingDNA.document.removeEventListener(\"keypress\", TypingDNA.keyPress);\n\n        // if android\n        TypingDNA.document.addEventListener(\"keydown\", TypingDNA.ACKeyDown);\n        TypingDNA.document.addEventListener(\"keyup\", TypingDNA.ACKeyUp);\n      } else {\n        var t0 = TypingDNA.pt1;\n        TypingDNA.pt1 = (new Date).getTime();\n        var seekTotal = TypingDNA.pt1 - t0;\n        var startTime = TypingDNA.pt1;\n        if (TypingDNA.recording == true || (TypingDNA.spKeyCodesObj[keyCode] && TypingDNA.spKeyRecording == true)) {\n          if (!e.shiftKey || TypingDNA.isMobile()) {\n            TypingDNA.wfk[keyCode] = 1;\n            TypingDNA.skt[keyCode] = seekTotal;\n            TypingDNA.sti[keyCode] = startTime;\n          }\n        }\n        if (TypingDNA.diagramRecording == true) {\n          TypingDNA.dwfk[keyCode] = 1;\n          TypingDNA.dskt[keyCode] = seekTotal;\n          TypingDNA.dsti[keyCode] = startTime;\n          TypingDNA.dlastDownKey = keyCode;\n        }\n      }\n    }\n\n    TypingDNA.keyPress = function(e) {\n      if (!TypingDNA.recording && !TypingDNA.diagramRecording) {\n        return;\n      }\n      if (!TypingDNA.isTarget(e.target.id)) {\n        return;\n      }\n      if (TypingDNA.diagramRecording == true) {\n        var keyCode = TypingDNA.dlastDownKey;\n        TypingDNA.drkc[keyCode] = e.charCode;\n      }\n    }\n\n    TypingDNA.keyUp = function(e) {\n      if (!TypingDNA.recording && !TypingDNA.diagramRecording) {\n        return;\n      }\n      if (!TypingDNA.isTarget(e.target.id)) {\n        return;\n      }\n      var ut = (new Date).getTime();\n      var keyCode = e.keyCode;\n      if (TypingDNA.recording == true || (TypingDNA.spKeyCodesObj[keyCode] && TypingDNA.spKeyRecording == true)) {\n        if (!e.shiftKey || TypingDNA.isMobile()) {\n          if (TypingDNA.wfk[keyCode] == 1) {\n            var pressTime = ut - TypingDNA.sti[keyCode];\n            var seekTime = TypingDNA.skt[keyCode];\n            var arr = [keyCode, seekTime, pressTime, TypingDNA.prevKeyCode, ut, e.target.id];\n            TypingDNA.history.add(arr);\n            TypingDNA.prevKeyCode = keyCode;\n          }\n        }\n        TypingDNA.wfk[keyCode] = 0;\n      }\n      if (TypingDNA.diagramRecording == true) {\n        if (TypingDNA.drkc[keyCode] != undefined && TypingDNA.drkc[keyCode] != 0) {\n          if (TypingDNA.dwfk[keyCode] == 1) {\n            var pressTime = ut - TypingDNA.dsti[keyCode];\n            var seekTime = TypingDNA.dskt[keyCode];\n            var realKeyCode = TypingDNA.drkc[keyCode];\n            var arrD = [keyCode, seekTime, pressTime, realKeyCode, ut, e.target.id];\n            TypingDNA.history.addDiagram(arrD);\n          }\n        }\n        TypingDNA.dwfk[keyCode] = 0;\n      }\n    }\n\n    TypingDNA.mouseScroll = function(e) {\n      if (TypingDNA.mouseRecording == true) {\n        if (TypingDNA.mouseMoveRecording == true) {\n          if (TypingDNA.mouse.scrollStarted == true) {\n            var currentTime = (new Date).getTime();\n            TypingDNA.mouse.scrollTimes.push(currentTime);\n            TypingDNA.mouse.scrollTopArr.push(TypingDNA.document.body.scrollTop);\n            clearInterval(TypingDNA.scrollInterval);\n            TypingDNA.scrollInterval = setInterval(TypingDNA.mouse.checkScroll, TypingDNA.maxScrollDeltaTime);\n          } else {\n            TypingDNA.mouse.scrollStarted = true\n          }\n        }\n      }\n    }\n\n    TypingDNA.mouseMove = function(e) {\n      if (TypingDNA.mouseRecording == true) {\n        var currentTime = (new Date).getTime();\n        if (TypingDNA.mouseMoveRecording == true) {\n          if (TypingDNA.mouse.started == true) {\n            TypingDNA.mouse.times.push(currentTime);\n            TypingDNA.mouse.xPositions.push(e.screenX);\n            TypingDNA.mouse.yPositions.push(e.screenY);\n            clearInterval(TypingDNA.moveInterval);\n            TypingDNA.moveInterval = setInterval(TypingDNA.mouse.checkMove, TypingDNA.maxMoveDeltaTime);\n          } else {\n            TypingDNA.mouse.started = true;\n          }\n        }\n        TypingDNA.lastMouseMoveTime = currentTime;\n      }\n    }\n\n    TypingDNA.mouseDown = function(e) {\n      if (TypingDNA.mouseRecording == true) {\n        TypingDNA.mouse.checkMove();\n        TypingDNA.mouse.checkScroll();\n        if (e.which == 1) {\n          TypingDNA.lastMouseDownTime = (new Date).getTime();\n          var stopTime = TypingDNA.lastMouseDownTime - TypingDNA.lastMouseMoveTime;\n          if (stopTime < TypingDNA.maxStopTime && TypingDNA.lastMouseStop == false) {\n            TypingDNA.stopTimes.push(stopTime);\n            if (TypingDNA.mouseMoveRecording == true) {\n              var eventType = 3;\n              var arr = [eventType, stopTime];\n              TypingDNA.mouse.history.add(arr);\n              TypingDNA.lastMouseStop = true;\n            }\n          }\n        }\n      }\n    }\n\n    TypingDNA.mouseUp = function(e) {\n      if (TypingDNA.mouseRecording == true) {\n        if (e.which == 1) {\n          var clickTime = (new Date).getTime() - TypingDNA.lastMouseDownTime;\n          if (clickTime < TypingDNA.maxClickTime && TypingDNA.lastMouseDownTime > TypingDNA.lastMouseMoveTime) {\n            TypingDNA.clickTimes.push(clickTime);\n            if (TypingDNA.mouseMoveRecording == true) {\n              var eventType = 4;\n              var arr = [eventType, clickTime];\n              TypingDNA.mouse.history.add(arr);\n            }\n          }\n        }\n      }\n    }\n\n    TypingDNA.ACKeyDown = function(e) {\n      if (!TypingDNA.recording && !TypingDNA.diagramRecording) {\n        return;\n      }\n      TypingDNA.ACSeekTime = (new Date).getTime() - TypingDNA.ACLastTime;\n      TypingDNA.ACLastTime = (new Date).getTime();\n      if (!TypingDNA.isTarget(e.target.id)) {\n        return;\n      }\n      if(TypingDNA.ACInputLengths.inputs.indexOf(e.target) === -1) {\n        TypingDNA.ACInputLengths.inputs.push(e.target);\n        TypingDNA.ACInputLengths.lastLength.push(0);\n      }\n    }\n\n    TypingDNA.ACKeyUp = function(e) {\n      if (!TypingDNA.recording && !TypingDNA.diagramRecording) {\n        return;\n      }\n      TypingDNA.ACPressTime = (new Date).getTime() - TypingDNA.ACLastTime;\n      TypingDNA.ACLastTime = (new Date).getTime();\n      if (!TypingDNA.isTarget(e.target.id)) {\n        return;\n      }\n      var keyCode = e.keyCode;\n      var targetIndex = TypingDNA.ACInputLengths.inputs.indexOf(e.target);\n      if(targetIndex === -1) {\n          TypingDNA.ACInputLengths.inputs.push(e.target);\n          TypingDNA.ACInputLengths.lastLength.push(0);\n          targetIndex = TypingDNA.ACInputLengths.inputs.indexOf(e.target);\n      }\n      if (keyCode == 229 && e.target.value.length >= TypingDNA.ACInputLengths.lastLength[targetIndex]) {\n          var char = e.target.value.substr((e.target.selectionStart - 1) || 0 , 1);\n          keyCode = char.toUpperCase().charCodeAt(0);\n          TypingDNA.ACLastCharCode = char.charCodeAt(0);\n          TypingDNA.ACLastKeyCode = char.toUpperCase().charCodeAt(0);\n      }\n      TypingDNA.ACInputLengths.lastLength[targetIndex] = e.target.value.length;\n      var arr = [keyCode, TypingDNA.ACSeekTime, TypingDNA.ACPressTime, TypingDNA.ACPreviousKeyCode, TypingDNA.ACLastTime];\n      TypingDNA.history.add(arr);\n      TypingDNA.ACPreviousKeyCode = keyCode;\n      if (TypingDNA.diagramRecording == true ) {\n        var arrD = [keyCode, TypingDNA.ACSeekTime, TypingDNA.ACPressTime, TypingDNA.ACLastCharCode];\n        TypingDNA.history.addDiagram(arrD);\n      }\n    }\n\n    TypingDNA.isTarget = function(target) {\n      if (TypingDNA.lastTarget == target && TypingDNA.lastTargetFound) {\n        return true;\n      } else {\n        var targetLength = TypingDNA.targetIds.length;\n        var targetFound = false;\n        if (targetLength > 0) {\n          for (var i = 0; i < targetLength; i++) {\n            if (TypingDNA.targetIds[i] == target) {\n              targetFound = true;\n              break;\n            }\n          }\n          TypingDNA.lastTarget = target;\n          TypingDNA.lastTargetFound = targetFound;\n          return targetFound;\n        } else {\n          TypingDNA.lastTarget = target;\n          TypingDNA.lastTargetFound = true;\n          return true;\n        }\n      }\n    }\n\n    if (TypingDNA.document.addEventListener) {\n      TypingDNA.document.addEventListener(\"keydown\", TypingDNA.keyDown);\n      TypingDNA.document.addEventListener(\"keyup\", TypingDNA.keyUp);\n      TypingDNA.document.addEventListener(\"keypress\", TypingDNA.keyPress);\n      TypingDNA.document.addEventListener(\"mousemove\", TypingDNA.mouseMove);\n      TypingDNA.document.addEventListener(\"mousedown\", TypingDNA.mouseDown);\n      TypingDNA.document.addEventListener(\"mouseup\", TypingDNA.mouseUp);\n      TypingDNA.document.addEventListener(\"scroll\", TypingDNA.mouseScroll);\n    } else if (TypingDNA.document.attachEvent) {\n      TypingDNA.document.attachEvent(\"onkeydown\", TypingDNA.keyDown);\n      TypingDNA.document.attachEvent(\"onkeyup\", TypingDNA.keyUp);\n      TypingDNA.document.attachEvent(\"onkeypress\", TypingDNA.keyPress);\n      TypingDNA.document.attachEvent(\"onmousemove\", TypingDNA.mouseMove);\n      TypingDNA.document.attachEvent(\"onmousedown\", TypingDNA.mouseDown);\n      TypingDNA.document.attachEvent(\"onmouseup\", TypingDNA.mouseUp);\n      TypingDNA.document.attachEvent(\"onscroll\", TypingDNA.mouseScroll);\n    } else {\n      console.log(\"browser not supported\");\n    }\n\n    TypingDNA.mouse = {};\n    TypingDNA.mouse.times = [];\n    TypingDNA.mouse.xPositions = [];\n    TypingDNA.mouse.yPositions = [];\n    TypingDNA.mouse.scrollTimes = [];\n    TypingDNA.mouse.scrollTopArr = [];\n    TypingDNA.mouse.history = {};\n    TypingDNA.mouse.history.stack = [];\n\n    TypingDNA.mouse.getDistance = function(a, b) {\n      return Math.sqrt((a * a) + (b * b));\n    }\n\n    TypingDNA.mouse.getTotalDistance = function(xPositions, yPositions) {\n      var totalDistance = 0;\n      var length = xPositions.length;\n      for (i = 1; i < length - 1; i++) {\n        var a = xPositions[i] - xPositions[i - 1];\n        var b = yPositions[i] - yPositions[i - 1];\n        totalDistance += TypingDNA.mouse.getDistance(a, b);\n      }\n      return totalDistance;\n    }\n\n    TypingDNA.mouse.getAngle = function(xPosDelta, yPosDelta) {\n      var angle = 0;\n      var leftRight = (xPosDelta >= 0); // 1 if left, 0 if right\n      var downUp = (yPosDelta < 0); // 1 if down, 0 if up\n      if (leftRight) {\n        if (downUp) {\n          angle = 180 + (Math.round(Math.atan(Math.abs(xPosDelta) / (Math.abs(yPosDelta) + 0.0000001)) / 0.01745329251)) // 0.01745329251 = pi/180\n        } else {\n          angle = 270 + (90 - Math.round(Math.atan(Math.abs(xPosDelta) / (Math.abs(yPosDelta) + 0.0000001)) / 0.01745329251))\n        }\n      } else {\n        if (downUp) {\n          angle = 90 + (90 - Math.round(Math.atan(Math.abs(xPosDelta) / (Math.abs(yPosDelta) + 0.0000001)) / 0.01745329251))\n        } else {\n          angle = Math.round(Math.atan(Math.abs(xPosDelta) / (Math.abs(yPosDelta) + 0.0000001)) / 0.01745329251)\n        }\n      }\n      return angle;\n    }\n\n    TypingDNA.mouse.recordMoveAction = function() {\n      var length = TypingDNA.mouse.times.length;\n      if (length < 3) {\n        return;\n      }\n      var deltaTime = TypingDNA.mouse.times[length - 1] - TypingDNA.mouse.times[0];\n      var xPosDelta = TypingDNA.mouse.xPositions[length - 1] - TypingDNA.mouse.xPositions[0];\n      var yPosDelta = TypingDNA.mouse.yPositions[length - 1] - TypingDNA.mouse.yPositions[0];\n      var directDistance = Math.round(TypingDNA.mouse.getDistance(xPosDelta, yPosDelta));\n      var totalDistance = Math.round(TypingDNA.mouse.getTotalDistance(TypingDNA.mouse.xPositions, TypingDNA.mouse.yPositions));\n      var ratioDistance = Math.round(totalDistance * 100 / directDistance);\n      var speed = Math.round(directDistance * 100 / deltaTime);\n      var angle = TypingDNA.mouse.getAngle(xPosDelta, yPosDelta);\n      var eventType = 1;\n      var arr = [eventType, deltaTime, directDistance, speed, angle, ratioDistance];\n      for (i in arr) {\n        if (isNaN(arr[i])) {\n          return;\n        }\n      }\n      TypingDNA.mouse.history.add(arr);\n      TypingDNA.lastMouseStop = false;\n    }\n\n    TypingDNA.mouse.recordScrollAction = function() {\n      var length = TypingDNA.mouse.scrollTimes.length;\n      if (length < 2) {\n        return;\n      }\n      var deltaTime = TypingDNA.mouse.scrollTimes[length - 1] - TypingDNA.mouse.scrollTimes[0];\n      var directDistance = TypingDNA.mouse.scrollTopArr[length - 1] - TypingDNA.mouse.scrollTopArr[0];\n      var speed = Math.round(directDistance * 100 / deltaTime);\n      var eventType = 2;\n      var arr = [eventType, deltaTime, directDistance, speed];\n      for (i in arr) {\n        if (isNaN(arr[i]) && !isFinite(arr[i])) {\n          return;\n        }\n      }\n      TypingDNA.mouse.history.add(arr);\n    }\n\n    TypingDNA.mouse.history.add = function(arr) {\n      this.stack.push(arr);\n      if (this.stack.length > TypingDNA.maxMouseHistoryLength) {\n        this.stack.shift();\n      }\n    }\n\n    TypingDNA.mouse.history.getDiagram = function() {\n      var mouseDiagram = this.stack.join(\"|\");\n      return [String(TypingDNA.isMobile()) + \",\" + String(TypingDNA.version), mouseDiagram].join(\"|\");\n    }\n\n    TypingDNA.mouse.clearLastMove = function() {\n      TypingDNA.mouse.times = [];\n      TypingDNA.mouse.xPositions = [];\n      TypingDNA.mouse.yPositions = [];\n    }\n\n    TypingDNA.mouse.checkMove = function() {\n      clearInterval(TypingDNA.moveInterval);\n      if (TypingDNA.mouse.started == true) {\n        TypingDNA.mouse.started = false;\n        TypingDNA.mouse.recordMoveAction();\n        TypingDNA.mouse.clearLastMove();\n      }\n    }\n\n    TypingDNA.mouse.clearLastScroll = function() {\n      TypingDNA.mouse.scrollTimes = [];\n      TypingDNA.mouse.scrollTopArr = [];\n    }\n\n    TypingDNA.mouse.checkScroll = function() {\n      clearInterval(TypingDNA.scrollInterval);\n      if (TypingDNA.mouse.scrollStarted == true) {\n        TypingDNA.mouse.scrollStarted = false;\n        TypingDNA.mouse.recordScrollAction();\n        TypingDNA.mouse.clearLastScroll();\n      }\n    }\n\n    /**\n     * Adds a target to the targetIds array.\n     */\n    TypingDNA.addTarget = function(target) {\n      var targetLength = TypingDNA.targetIds.length;\n      var targetFound = false;\n      if (targetLength > 0) {\n        for (var i = 0; i < targetLength; i++) {\n          if (TypingDNA.targetIds[i] == target) {\n            targetFound = true;\n            break;\n          }\n        }\n        if (!targetFound) {\n          TypingDNA.targetIds.push(target);\n        }\n      } else {\n        TypingDNA.targetIds.push(target);\n      }\n    }\n\n    /**\n     * Adds a target to the targetIds array.\n     */\n    TypingDNA.removeTarget = function(target) {\n      var targetLength = TypingDNA.targetIds.length;\n      if (targetLength > 0) {\n        for (var i = 0; i < targetLength; i++) {\n          if (TypingDNA.targetIds[i] == target) {\n            TypingDNA.targetIds.splice(i, 1);\n            break;\n          }\n        }\n      }\n    }\n\n    /**\n     * Resets the history stack\n     */\n    TypingDNA.reset = function(all) {\n      TypingDNA.history.stack = [];\n      TypingDNA.history.stackDiagram = [];\n      TypingDNA.clickTimes = [];\n      TypingDNA.stopTimes = [];\n      TypingDNA.ACInputLengths = {\n          inputs: [],\n          lastLength: [],\n      };\n      if (all == true) {\n        TypingDNA.mouse.history.stack = [];\n      }\n    }\n\n    /**\n     * Automatically called at initilization. It starts the recording of keystrokes.\n     */\n    TypingDNA.start = function() {\n      TypingDNA.diagramRecording = true;\n      return TypingDNA.recording = true;\n    }\n\n    /**\n     * Ends the recording of further keystrokes. To restart recording afterwards you can\n     * either call TypingDNA.start() or create a new TypingDNA object again, not recommended.\n     */\n    TypingDNA.stop = function() {\n      TypingDNA.diagramRecording = false;\n      return TypingDNA.recording = false;\n    }\n\n    /**\n     * Starts the recording of mouse activity.\n     */\n    TypingDNA.startMouse = function() {\n      return TypingDNA.mouseRecording = TypingDNA.mouseMoveRecording = true;\n    }\n\n    /**\n     * Stops the recording of mouse activity.\n     */\n    TypingDNA.stopMouse = function() {\n      return TypingDNA.mouseRecording = TypingDNA.mouseMoveRecording = false;\n    }\n\n    /**\n     * This is the main function that outputs the typing pattern as a String\n     * {type:Number, text:String, textId:Number, length: Number, targetId:String, caseSensitive:Boolean}\n     * @param {Object} obj an object with the following properties\n     * * * @param {String} type 0 for anytext pattern, 1 for sametext pattern (also called diagram pattern)\n     * * * and 2 for extended pattern (most versatile, can replace both anytext and sametext patterns)\n     * * * @param {Number} length (Optional) the length of the text in the history for which you want\n     * * * the typing pattern. length is ignored when text or targetId is set (or both).\n     * * * @param {String} text  (Only for type 1 and type 2) a typed string that you want the typing pattern for\n     * * * @param {Number} textId (Optional, only for type 1 and type 2) a personalized id for the typed text\n     * * * @param {String} targetId (Optional) specifies if pattern is obtain only from text typed in a certain target\n     * * * @param {Boolean} caseSensitive (Optional, default: false) Used if you pass a text for type 1 or type 2\n     * * * DEPRECATED * * * in favor of type = 2 * * *\n     * * * @param {Boolean} extended (Only for type 1) specifies if full information about what was typed is produced,\n     * * * including the actual key pressed, if false, only the order of pressed keys is kept (no actual content)\n     * @return {String} A typing pattern in string form\n     * @example var typingPattern = tdna.getTypingPattern({type=0, length=180});\n     * @example var typingPattern = tdna.getTypingPattern({type=1, text=\"Hello5g21?*\"});\n     * @example var typingPattern = tdna.getTypingPattern({type=2, text=\"example@mail.com\"});\n     */\n    TypingDNA.getTypingPattern = function(obj) {\n      if (typeof obj === 'object') {\n        switch (obj.type) {\n          case 0:\n            return TypingDNA.get(obj.length, obj.targetId);\n            break;\n          case 1:\n            var str = (obj.text != undefined) ? obj.text : obj.length;\n            return TypingDNA.history.getDiagram(obj.extended, str, obj.textId, obj.targetId, obj.caseSensitive);\n            break;\n          case 2:\n            var str = (obj.text != undefined) ? obj.text : obj.length;\n            return TypingDNA.history.getDiagram(true, str, obj.textId, obj.targetId, obj.caseSensitive);\n            break;\n          default:\n            return TypingDNA.get(obj.length);\n            break;\n        }\n      } else {\n        return TypingDNA.get();\n      }\n    }\n\n    TypingDNA.getDiagram = function(str, textId) {\n      return TypingDNA.history.getDiagram(false, str, textId, undefined, false);\n    }\n\n    TypingDNA.getExtendedDiagram = function(str, textId) {\n      return TypingDNA.history.getDiagram(true, str, textId, undefined, false);\n    }\n\n    TypingDNA.getMouseDiagram = function() {\n      return TypingDNA.mouse.history.getDiagram();\n    }\n\n    TypingDNA.get = function(length, targetId) {\n      var historyTotalLength = TypingDNA.history.stack.length;\n      if (length == undefined || length == 0) {\n        length = TypingDNA.defaultHistoryLength;\n      }\n      if (length > historyTotalLength) {\n        length = historyTotalLength;\n      }\n      var obj = {};\n      [obj.arr, targetLength] = TypingDNA.history.get(length, \"\", targetId);\n      if (targetId != undefined && targetId != \"\") {\n        length = targetLength;\n      }\n      var zl = TypingDNA.zl;\n      var histRev = length;\n      var histSktF = TypingDNA.math.fo(TypingDNA.history.get(length, \"seek\", targetId));\n      var histPrtF = TypingDNA.math.fo(TypingDNA.history.get(length, \"press\", targetId));\n      var pressHistMean = Math.round(TypingDNA.math.avg(histPrtF));\n      var seekHistMean = Math.round(TypingDNA.math.avg(histSktF));\n      var pressHistSD = Math.round(TypingDNA.math.sd(histPrtF));\n      var seekHistSD = Math.round(TypingDNA.math.sd(histSktF));\n      var charMeanTime = seekHistMean + pressHistMean;\n      var pressRatio = TypingDNA.math.rd((pressHistMean + zl) / (charMeanTime + zl), 4);\n      var seekToPressRatio = TypingDNA.math.rd((1 - pressRatio) / pressRatio, 4);\n      var pressSDToPressRatio = TypingDNA.math.rd((pressHistSD + zl) / (pressHistMean + zl), 4);\n      var seekSDToPressRatio = TypingDNA.math.rd((seekHistSD + zl) / (pressHistMean + zl), 4);\n      var cpm = Math.round(6E4 / (charMeanTime + zl));\n      if (histRev == 0) {\n        cpm = 0;\n      }\n      for (var i in obj.arr) {\n        var rev = obj.arr[i][1].length;\n        var seekMean = 0;\n        var pressMean = 0;\n        var postMean = 0;\n        var seekSD = 0;\n        var pressSD = 0;\n        var postSD = 0;\n        switch (obj.arr[i][0].length) {\n          case 0:\n            break;\n          case 1:\n            var seekMean = TypingDNA.math.rd((obj.arr[i][0][0] + zl) / (seekHistMean + zl), 4);\n            break;\n          default:\n            var arr = TypingDNA.math.fo(obj.arr[i][0]);\n            seekMean = TypingDNA.math.rd((TypingDNA.math.avg(arr) + zl) / (seekHistMean + zl), 4);\n            seekSD = TypingDNA.math.rd((TypingDNA.math.sd(arr) + zl) / (seekHistSD + zl), 4);\n        }\n        switch (obj.arr[i][1].length) {\n          case 0:\n            break;\n          case 1:\n            var pressMean = TypingDNA.math.rd((obj.arr[i][1][0] + zl) / (pressHistMean + zl), 4);\n            break;\n          default:\n            var arr = TypingDNA.math.fo(obj.arr[i][1]);\n            pressMean = TypingDNA.math.rd((TypingDNA.math.avg(arr) + zl) / (pressHistMean + zl), 4);\n            pressSD = TypingDNA.math.rd((TypingDNA.math.sd(arr) + zl) / (pressHistSD + zl), 4);\n        }\n        switch (obj.arr[i][2].length) {\n          case 0:\n            break;\n          case 1:\n            var postMean = TypingDNA.math.rd((obj.arr[i][2][0] + zl) / (seekHistMean + zl), 4);\n            break;\n          default:\n            var arr = TypingDNA.math.fo(obj.arr[i][2]);\n            postMean = TypingDNA.math.rd((TypingDNA.math.avg(arr) + zl) / (seekHistMean + zl), 4);\n            postSD = TypingDNA.math.rd((TypingDNA.math.sd(arr) + zl) / (seekHistSD + zl), 4);\n        }\n        delete obj.arr[i][2];\n        delete obj.arr[i][1];\n        delete obj.arr[i][0];\n        obj.arr[i][0] = rev;\n        obj.arr[i][1] = seekMean;\n        obj.arr[i][2] = pressMean;\n        obj.arr[i][3] = postMean;\n        obj.arr[i][4] = seekSD;\n        obj.arr[i][5] = pressSD;\n        obj.arr[i][6] = postSD;\n      }\n      var arr = [];\n      TypingDNA.apu(arr, histRev);\n      TypingDNA.apu(arr, cpm);\n      TypingDNA.apu(arr, charMeanTime);\n      TypingDNA.apu(arr, pressRatio);\n      TypingDNA.apu(arr, seekToPressRatio);\n      TypingDNA.apu(arr, pressSDToPressRatio);\n      TypingDNA.apu(arr, seekSDToPressRatio);\n      TypingDNA.apu(arr, pressHistMean);\n      TypingDNA.apu(arr, seekHistMean);\n      TypingDNA.apu(arr, pressHistSD);\n      TypingDNA.apu(arr, seekHistSD);\n      for (var c = 0; c <= 6; c++) {\n        for (var i = 0; i < 44; i++) {\n          var keyCode = TypingDNA.keyCodes[i];\n          var val = obj.arr[keyCode][c];\n          if (val == 0 && c > 0) {\n            val = 1;\n          }\n          TypingDNA.apu(arr, val);\n        }\n      }\n      TypingDNA.apu(arr, TypingDNA.isMobile());\n      TypingDNA.apu(arr, TypingDNA.version);\n      TypingDNA.apu(arr, TypingDNA.flags);\n      arr.push(TypingDNA.history.getSpecialKeys());\n      return arr.join(\",\");\n    }\n\n    TypingDNA.apu = function(arr, val) {\n      \"NaN\" == String(val) && (val = 0);\n      arr.push(val);\n    }\n\n    TypingDNA.math = {};\n\n    TypingDNA.math.rd = function(val, dec) {\n      return Number(val.toFixed(dec));\n    }\n\n    TypingDNA.math.avg = function(arr) {\n      var len = arr.length;\n      if (len > 0) {\n        var sum = 0;\n        for (var i = 0; i < len; i++) {\n          sum += arr[i];\n        }\n        return this.rd(sum / len, 4);\n      } else {\n        return 0;\n      }\n    }\n\n    TypingDNA.math.sd = function(arr) {\n      var len = arr.length;\n      if (len < 2) {\n        return 0;\n      } else {\n        var sumVS = 0;\n        var mean = this.avg(arr);\n        for (var i = 0; i < len; i++) {\n          sumVS += (arr[i] - mean) * (arr[i] - mean);\n        }\n        var sd = Math.sqrt(sumVS / len);\n        return sd;\n      }\n    }\n\n    TypingDNA.math.fo = function(arr) {\n      if (arr.length > 1) {\n        var values = arr.concat();\n        var len = arr.length;\n        values.sort(function(a, b) {\n          return a - b;\n        });\n        var asd = this.sd(values);\n        var aMean = values[Math.ceil(arr.length / 2)];\n        var multiplier = 2;\n        var maxVal = aMean + multiplier * asd;\n        var minVal = aMean - multiplier * asd;\n        if (len < 20) {\n          minVal = 0;\n        }\n        var fVal = [];\n        for (var i = 0; i < len; i++) {\n          var tempval = values[i];\n          if (tempval < maxVal && tempval > minVal) {\n            fVal.push(tempval);\n          }\n        }\n        return fVal;\n      } else {\n        return arr;\n      }\n    }\n\n    // Calculate a 32 bit FNV-1a hash\n    TypingDNA.math.fnv1aHash = function(str) {\n      if (str == undefined && typeof str !== 'string') {\n        return 0;\n      }\n      str = str.toLowerCase();\n      var i, l;\n      var hval = 0x721b5ad4;\n      for (i = 0, l = str.length; i < l; i++) {\n        hval ^= str.charCodeAt(i);\n        hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);\n      }\n      return hval >>> 0;\n    }\n\n    TypingDNA.history = {};\n    TypingDNA.history.stack = [];\n    TypingDNA.history.stackDiagram = [];\n\n    TypingDNA.history.add = function(arr) {\n      this.stack.push(arr);\n      if (this.stack.length > TypingDNA.maxHistoryLength) {\n        this.stack.shift();\n      }\n    }\n\n    TypingDNA.history.addDiagram = function(arr) {\n      this.stackDiagram.push(arr);\n    }\n\n    TypingDNA.history.getDiagram = function(extended, str, textId, targetId, caseSensitive) {\n      var caseSensitive = (caseSensitive != undefined) ? caseSensitive : (str == undefined || str == \"\");\n      var returnArr = [];\n      var diagramType = (extended == true) ? 1 : 0;\n      var stackDiagram = this.stackDiagram;\n      if (targetId != undefined && targetId != \"\" && stackDiagram.length > 0) {\n        stackDiagram = TypingDNA.sliceStackByTargetId(stackDiagram, targetId);\n        if (str == undefined || str == \"\") {\n          var element = TypingDNA.document.getElementById(targetId);\n          if (element != null) {\n            str = element.value;\n          }\n        }\n      } else {\n        var targetLength = TypingDNA.targetIds.length;\n        if (str == undefined || str == \"\") {\n          if (targetLength > 0) {\n            str = \"\";\n            for (var i = 0; i < targetLength; i++) {\n              var element = TypingDNA.document.getElementById(TypingDNA.targetIds[i]);\n              if (element != null) {\n                str += element.value;\n              }\n            }\n          } else {\n            if (!extended) {\n              console.log(\"Please use extended pattern OR provide a fixed string param OR use the addTarget method.\");\n            }\n          }\n        }\n      }\n      var missingCount = 0;\n      var diagramHistoryLength = stackDiagram.length;\n      var strLength = diagramHistoryLength;\n      if (typeof str === 'string') {\n        strLength = str.length;\n      } else if (typeof str === 'number' && str < diagramHistoryLength) {\n        strLength = str;\n      }\n      var returnTextId = 0;\n      if (textId != undefined) {\n        if (isNaN(parseInt(textId))) {\n          returnTextId = TypingDNA.math.fnv1aHash(textId);\n        } else {\n          returnTextId = parseInt(textId);\n        }\n      } else {\n        if (typeof str === 'string') {\n          returnTextId = TypingDNA.math.fnv1aHash(str);\n        }\n      }\n      returnArr.push([TypingDNA.isMobile(), TypingDNA.version, TypingDNA.flags, diagramType, strLength, returnTextId, TypingDNA.history.getSpecialKeys()]);\n      if (str != undefined && str.length > 0 && typeof str === 'string') {\n        var strLower = str.toLowerCase();\n        var strUpper = str.toUpperCase();\n        var lastFoundPos = [];\n        var lastPos = 0;\n        var strUpperCharCode;\n        var currentSensitiveCharCode;\n        for (var i = 0; i < str.length; i++) {\n          var currentCharCode = str.charCodeAt(i);\n          if (!caseSensitive) {\n            strUpperCharCode = strUpper.charCodeAt(i);\n            currentSensitiveCharCode = (strUpperCharCode != currentCharCode) ? strUpperCharCode : strLower.charCodeAt(i);\n          }\n          var startPos = lastPos;\n          var finishPos = diagramHistoryLength;\n          var found = false;\n          while (found == false) {\n            for (var j = startPos; j < finishPos; j++) {\n              var arr = stackDiagram[j];\n              var charCode = arr[3];\n              if (charCode == currentCharCode || (!caseSensitive && charCode == currentSensitiveCharCode)) {\n                found = true;\n                if (j == lastPos) {\n                  lastPos++;\n                  lastFoundPos = [];\n                } else {\n                  lastFoundPos.push(j);\n                  var len = lastFoundPos.length;\n                  if (len > 1 && lastFoundPos[len - 1] == lastFoundPos[len - 2] + 1) {\n                    lastPos = j + 1;\n                    lastFoundPos = [];\n                  }\n                }\n                var keyCode = arr[0];\n                var seekTime = arr[1];\n                var pressTime = arr[2];\n                if (extended) {\n                  returnArr.push([charCode, seekTime, pressTime, keyCode]);\n                } else {\n                  returnArr.push([seekTime, pressTime]);\n                }\n                break;\n              }\n            }\n            if (found == false) {\n              if (startPos != 0) {\n                startPos = 0;\n                finishPos = lastPos;\n              } else {\n                found = true;\n                if (TypingDNA.replaceMissingKeys) {\n                  missingCount++;\n                  if (typeof TypingDNA.savedMissingAvgValues !== 'object' || TypingDNA.savedMissingAvgValues.historyLength != diagramHistoryLength) {\n                    var histSktF = TypingDNA.math.fo(TypingDNA.history.get(0, \"seek\"));\n                    var histPrtF = TypingDNA.math.fo(TypingDNA.history.get(0, \"press\"));\n                    var seekTime = Math.round(TypingDNA.math.avg(histSktF));\n                    var pressTime = Math.round(TypingDNA.math.avg(histPrtF));\n                    TypingDNA.savedMissingAvgValues = {\n                      seekTime: seekTime,\n                      pressTime: pressTime,\n                      historyLength: diagramHistoryLength\n                    };\n                  } else {\n                    var seekTime = TypingDNA.savedMissingAvgValues.seekTime;\n                    var pressTime = TypingDNA.savedMissingAvgValues.pressTime;\n                  }\n                  var missing = 1;\n                  if (extended) {\n                    returnArr.push([currentCharCode, seekTime, pressTime, currentCharCode, missing]);\n                  } else {\n                    returnArr.push([seekTime, pressTime, missing]);\n                  }\n                  break;\n                }\n              }\n            }\n          }\n          if (TypingDNA.replaceMissingKeysPerc < missingCount * 100 / strLength) {\n            return null;\n          }\n        }\n      } else {\n        var startCount = 0;\n        if (typeof str === 'number') {\n          startCount = diagramHistoryLength - str;\n        }\n        if (startCount < 0) {\n          startCount = 0;\n        }\n        for (var i = startCount; i < diagramHistoryLength; i++) {\n          var arr = stackDiagram[i];\n          var keyCode = arr[0];\n          var seekTime = arr[1];\n          var pressTime = arr[2];\n          if (extended) {\n            var charCode = arr[3];\n            returnArr.push([charCode, seekTime, pressTime, keyCode]);\n          } else {\n            returnArr.push([seekTime, pressTime]);\n          }\n        }\n      }\n      return returnArr.join(\"|\");\n    }\n\n    TypingDNA.sliceStackByTargetId = function(stack, targetId) {\n      var length = stack.length;\n      var newStack = [];\n      for (i = 0; i < length; i++) {\n        var arr = stack[i];\n        if (arr[5] == targetId) {\n          newStack.push(arr);\n        }\n      }\n      return newStack;\n    }\n\n    TypingDNA.history.get = function(length, type, targetId) {\n      var stack = this.stack;\n      if (targetId != undefined && targetId != \"\" && stack.length > 0) {\n        stack = TypingDNA.sliceStackByTargetId(stack, targetId);\n      }\n      var historyTotalLength = stack.length;\n      if (length == 0 || length == undefined) {\n        length = TypingDNA.defaultHistoryLength;\n      }\n      if (length > historyTotalLength) {\n        length = historyTotalLength;\n      }\n      switch (type) {\n        case \"seek\":\n          var seekArr = [];\n          for (i = 1; i <= length; i++) {\n            var seekTime = stack[historyTotalLength - i][1];\n            if (seekTime <= TypingDNA.maxSeekTime) {\n              seekArr.push(seekTime);\n            }\n          };\n          return seekArr;\n          break;\n        case \"press\":\n          var pressArr = [];\n          for (i = 1; i <= length; i++) {\n            var pressTime = stack[historyTotalLength - i][2];\n            if (pressTime <= TypingDNA.maxPressTime) {\n              pressArr.push(pressTime);\n            }\n          };\n          return pressArr;\n          break;\n        default:\n          var historyStackObj = {};\n          for (var i in TypingDNA.keyCodes) {\n            historyStackObj[TypingDNA.keyCodes[i]] = [\n              [],\n              [],\n              []\n            ];\n          }\n          for (i = 1; i <= length; i++) {\n            var arr = stack[historyTotalLength - i];\n            var keyCode = arr[0];\n            var seekTime = arr[1];\n            var pressTime = arr[2];\n            var prevKeyCode = arr[3];\n            if (TypingDNA.keyCodesObj[keyCode]) {\n              if (seekTime <= TypingDNA.maxSeekTime) {\n                historyStackObj[keyCode][0].push(seekTime);\n                if (prevKeyCode != 0 && TypingDNA.keyCodesObj[prevKeyCode]) {\n                  historyStackObj[prevKeyCode][2].push(seekTime);\n                }\n              }\n              if (pressTime <= TypingDNA.maxPressTime) {\n                historyStackObj[keyCode][1].push(pressTime);\n              }\n            }\n          };\n          return [historyStackObj, length];\n      }\n    }\n\n    TypingDNA.history.getSpecialKeys = function() {\n      var returnArr = [];\n      var length = this.stack.length;\n      var historyStackObj = {};\n      for (var i in TypingDNA.spKeyCodes) {\n        historyStackObj[TypingDNA.spKeyCodes[i]] = [\n          [],\n        ];\n      }\n      for (i = 1; i <= length; i++) {\n        var arr = this.stack[length - i];\n        if (TypingDNA.spKeyCodesObj[arr[0]]) {\n          var keyCode = arr[0];\n          var pressTime = arr[2];\n          if (pressTime <= TypingDNA.maxPressTime) {\n            historyStackObj[keyCode][0].push(pressTime);\n          }\n        }\n      }\n      for (var i in TypingDNA.spKeyCodes) {\n        var arr = TypingDNA.math.fo(historyStackObj[TypingDNA.spKeyCodes[i]][0]);\n        var arrLen = arr.length;\n        returnArr.push(arrLen);\n        if (arrLen > 1) {\n          returnArr.push(Math.round(TypingDNA.math.avg(arr)));\n          returnArr.push(Math.round(TypingDNA.math.sd(arr)));\n        } else if (arrLen == 1) {\n          returnArr.push([arr[0], -1]);\n        } else {\n          returnArr.push([-1, -1]);\n        }\n      }\n      var clicksArrLen = TypingDNA.clickTimes.length;\n      returnArr.push(clicksArrLen);\n      if (clicksArrLen > 1) {\n        returnArr.push(Math.round(TypingDNA.math.avg(TypingDNA.clickTimes)));\n        returnArr.push(Math.round(TypingDNA.math.sd(TypingDNA.clickTimes)));\n      } else if (clicksArrLen == 1) {\n        returnArr.push(TypingDNA.clickTimes[0], -1);\n      } else {\n        returnArr.push([-1, -1]);\n      }\n      var stopArrLen = TypingDNA.stopTimes.length;\n      returnArr.push(stopArrLen);\n      if (stopArrLen > 1) {\n        returnArr.push(Math.round(TypingDNA.math.avg(TypingDNA.stopTimes)));\n        returnArr.push(Math.round(TypingDNA.math.sd(TypingDNA.stopTimes)));\n      } else if (stopArrLen == 1) {\n        returnArr.push(TypingDNA.stopTimes[0], -1);\n      } else {\n        returnArr.push([-1, -1]);\n      }\n      return returnArr;\n    }\n\n    /**\n     * Checks the quality of a typing pattern, how well it is revelated, how useful the\n     * information will be for matching applications. It returns a value between 0 and 1.\n     * Values over 0.3 are acceptable, however a value over 0.7 shows good pattern strength.\n     * @param  {String} typingPattern The typing pattern string returned by the get() function.\n     * @return {Number} A real number between 0 and 1. A close to 1 value means a stronger pattern.\n     * @example var quality = tdna.getQuality(typingPattern);\n     */\n    TypingDNA.getQuality = function(typingPattern) {\n      var obj = typingPattern.split(\",\");\n      for (i = 0; i < obj.length; i++) {\n        obj[i] = Number(obj[i]);\n      }\n      var totalEvents = obj[0];\n      var acc = rec = avgAcc = 0;\n      var avg = TypingDNA.math.avg(obj);\n      var revs = obj.slice(11, 55);\n      for (var i in revs) {\n        rec += Number(revs[i] > 0);\n        acc += Number(revs[i] > 4);\n        avgAcc += Number(revs[i] > avg);\n      }\n      var tReturn = Math.sqrt(rec * acc * avgAcc) / 80;\n      return tReturn > 1 ? 1 : tReturn;\n    }\n\n    /**\n     * Checks the validity of a typing pattern if recorded on mobile.\n     * @param  {String} typingPattern The typing pattern string returned by the get() function.\n     * @return {Number} A real number between 0 and 1. A number larger than 0.7 usually means a valid pattern.\n     * @example var quality = tdna.checkMobileValidity(typingPattern);\n     */\n    TypingDNA.checkMobileValidity = function(typingPattern) {\n      var obj = typingPattern.split(\",\");\n      var totalEvents = obj[0];\n      if (totalEvents == 0) {\n        return 0;\n      }\n      var rec = 0;\n      var revs = obj.slice(11, 55);\n      for (var i in revs) {\n        rec += Number(revs[i]);\n      }\n      return rec / totalEvents;\n    }\n\n    TypingDNA.getLength = function(typingPattern) {\n      return Number(typingPattern.split(\",\")[1]);\n    }\n\n    TypingDNA.isMobile = function() {\n      if (TypingDNA.mobile != undefined) {\n        return TypingDNA.mobile;\n      } else {\n        var check = 0;\n        (function(a) {\n          if (\n            /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i\n            .test(a) ||\n            /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i\n            .test(a.substr(0, 4))) {\n            check = 1\n          }\n        })(navigator.userAgent || navigator.vendor || window.opera);\n        TypingDNA.mobile = check;\n        return check;\n      }\n    }\n\n    TypingDNA.getTextId = function(str) {\n      return TypingDNA.math.fnv1aHash(str);\n    }\n  } else {\n    // TypingDNA is a static class, currently doesn't support actual multiple instances (Singleton implementation)\n    return TypingDNA.instance;\n  }\n}\n","/*!\n * Copyright (c) 2018, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport TypingDNA from '@okta/typingdna';\nlet tdna;\nexport default {\n  track: function(selectorId) {\n    try {\n      tdna = new TypingDNA();\n      tdna.addTarget(selectorId);\n      tdna.start();\n    } catch (e) {\n      // Issues in typing should not stop Primary auth.\n    }\n  },\n  getTypingPattern: function() {\n    try {\n      return tdna.getTypingPattern({\n        type: 1,\n      });\n    } catch (e) {\n      return null;\n    }\n  },\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { Form, loc } from '@okta/courage';\nimport DeviceFingerprint from 'v1/util/DeviceFingerprint';\nimport TypingUtil from 'v1/util/TypingUtil';\nimport Util from 'util/Util';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default Form.extend({\n  className: 'primary-auth-form',\n  noCancelButton: true,\n  attributes: { novalidate: 'novalidate' },\n  save: function() {\n    if (this.settings.get('features.passwordlessAuth')) {\n      return loc('oform.next', 'login');\n    }\n    return loc('primaryauth.submit', 'login');\n  },\n  saveId: 'okta-signin-submit',\n  layout: 'o-form-theme',\n\n  // If socialAuth is configured, the title moves from the form to\n  // the top of the container (and is rendered in socialAuth).\n  title: function() {\n    let formTitle = loc('primaryauth.title', 'login');\n\n    if (this.settings.get('socialAuthPositionTop')) {\n      formTitle = '';\n    }\n    return formTitle;\n  },\n\n  initialize: function() {\n    const trackTypingPattern = this.settings.get('features.trackTypingPattern');\n\n    this.listenTo(this, 'save', async function() {\n      const { appState } = this.options;\n      if (trackTypingPattern) {\n        const typingPattern = TypingUtil.getTypingPattern();\n        appState.set('typingPattern', typingPattern);\n      }\n      const creds = {\n        username: this.model.get('username'),\n      };\n\n      if (!this.settings.get('features.passwordlessAuth')) {\n        creds.password = this.model.get('password');\n      }\n\n      // show loading spinner and disable submit button before processCreds hook runs\n      appState.trigger('loading', true);\n      this.state.trigger('togglePrimaryAuthButton', true);\n      \n      await this.settings.processCreds(creds);\n\n      if (this.settings.get('features.deviceFingerprinting')) {\n        try {\n          const fingerprint = await DeviceFingerprint.generateDeviceFingerprint(this.settings.get('baseUrl'), this.$el);\n          appState.set('deviceFingerprint', fingerprint);\n        } catch {\n          // Keep going even if device fingerprint fails\n        }\n      }\n\n      this.model.save();\n    });\n\n    this.stateEnableChange();\n    this.stateUsernameChange();\n  },\n\n  stateEnableChange: function() {\n    this.listenTo(this.state, 'change:enabled', function(model, enable) {\n      if (enable) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    });\n  },\n\n  stateUsernameChange: function() {\n    this.listenTo(this.state, 'change:disableUsername', function(model, disable) {\n      if (disable) {\n        this.$el.find('#okta-signin-username').attr('disabled', true);\n      } else {\n        this.$el.find('#okta-signin-username').removeAttr('disabled');\n      }\n    });\n  },\n\n  inputs: function() {\n    const inputs = [];\n\n    inputs.push(this.getUsernameField());\n    if (!this.settings.get('features.passwordlessAuth')) {\n      inputs.push(this.getPasswordField());\n    }\n    if (this.settings.get('features.rememberMe')) {\n      inputs.push(this.getRemeberMeCheckbox());\n    }\n    return inputs;\n  },\n\n  getUsernameField: function() {\n    const userNameFieldObject = {\n      className: 'margin-btm-5',\n      label: loc('primaryauth.username.placeholder', 'login'),\n      'label-top': true,\n      explain: () => {\n        if (!this.isCustomized('primaryauth.username.tooltip')) {\n          return false;\n        }\n\n        return Util.createInputExplain('primaryauth.username.tooltip', 'primaryauth.username.placeholder', 'login');\n      },\n      'explain-top': true,\n      name: 'username',\n      input: TextBox,\n      inputId: 'okta-signin-username',\n      type: 'text',\n      disabled: this.options.appState.get('disableUsername'),\n      autoComplete: Util.getAutocompleteValue(this.settings, 'username'),\n      // TODO: support a11y attrs in Courage - OKTA-279025\n      render: function() {\n        const that = this;\n        function clearAriaInvalid() {\n          that.$(this)\n            .removeAttr('aria-invalid')\n            .off('focusout', clearAriaInvalid)\n            .off('change', clearAriaInvalid);\n        }\n\n        this.$(`input[name=${this.options.name}]`)\n          // OKTA-430928: to prevent NVDA and JAWS screen readers from\n          // announcing \"required invalid entry\" before the user has a chance to\n          // complete the field, aria-invalid is set to \"false\" initially and\n          // removed on focusout or change using clearAriaInvalid()\n          .attr({\n            'aria-invalid': 'false',\n            'aria-required': 'true',\n          })\n          .prop({\n            required: true,\n          })\n          .focusout(clearAriaInvalid)\n          .change(clearAriaInvalid);\n      },\n    };\n\n    return userNameFieldObject;\n  },\n\n  getPasswordField: function() {\n    const passwordFieldObject = {\n      className: 'margin-btm-30',\n      label: loc('primaryauth.password.placeholder', 'login'),\n      'label-top': true,\n      explain: () => {\n        if (!this.isCustomized('primaryauth.password.tooltip')) {\n          return false;\n        }\n\n        return Util.createInputExplain('primaryauth.password.tooltip', 'primaryauth.password.placeholder', 'login');\n      },\n      'explain-top': true,\n      name: 'password',\n      inputId: 'okta-signin-password',\n      validateOnlyIfDirty: true,\n      type: 'password',\n      autoComplete: Util.getAutocompleteValue(this.settings, 'current-password'),\n      // TODO: support a11y attrs in Courage - OKTA-279025\n      render: function() {\n        const that = this;\n        function clearAriaInvalid() {\n          that.$(this)\n            .removeAttr('aria-invalid')\n            .off('focusout', clearAriaInvalid)\n            .off('change', clearAriaInvalid);\n        }\n        this.$(`input[name=${this.options.name}]`)\n          // OKTA-430928: to prevent NVDA and JAWS screen readers from\n          // announcing \"required invalid entry\" before the user has a chance to\n          // complete the field, aria-invalid is set to \"false\" initially and\n          // removed on focusout or change using clearAriaInvalid()\n          .attr({\n            'aria-invalid': 'false',\n            'aria-required': 'true',\n          })\n          .prop({\n            required: true\n          })\n          .focusout(clearAriaInvalid)\n          .change(clearAriaInvalid);\n      },\n    };\n\n    if (this.settings.get('features.showPasswordToggleOnSignInPage')) {\n      passwordFieldObject.params = {};\n      passwordFieldObject.params.showPasswordToggle = true;\n    }\n    return passwordFieldObject;\n  },\n\n  isCustomized: function(property) {\n    const language = this.settings.get('language');\n    const i18n = this.settings.get('i18n');\n    const customizedProperty = i18n && i18n[language] && i18n[language][property];\n\n    return !!customizedProperty;\n  },\n\n  // TODO fix method name typo\n  getRemeberMeCheckbox: function() {\n    return {\n      label: false,\n      placeholder: loc('remember', 'login'),\n      name: 'remember',\n      type: 'checkbox',\n      'label-top': true,\n      className: 'margin-btm-0',\n      initialize: function() {\n        this.listenTo(this.model, 'change:remember', function(model, val) {\n          // OKTA-98946: We normally re-render on changes to model values,\n          // but in this case we will manually update the checkbox due to\n          // iOS Safari and how it handles autofill - it will autofill the\n          // form anytime the dom elements are re-rendered, which prevents\n          // the user from editing their username.\n          this.$(':checkbox').prop('checked', val).trigger('updateState');\n        });\n      },\n    };\n  },\n\n  focus: function() {\n    if (!this.model.get('username')) {\n      this.getInputs().first().focus();\n    } else if (!this.settings.get('features.passwordlessAuth')) {\n      this.getInputs().toArray()[1].focus();\n    }\n    if (this.settings.get('features.trackTypingPattern')) {\n      TypingUtil.track('okta-signin-username');\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nconst { Util } = internal.util;\nexport default View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" data-se=\"needhelp\" aria-expanded=\"false\" \\\n        aria-controls=\"help-links-container\" class=\"link help js-help\">\\\n      {{i18n code=\"needhelp\" bundle=\"login\"}}\\\n      </a>\\\n      <ul class=\"help-links js-help-links\" id=\"help-links-container\">\\\n        <li>\\\n        <a href=\"#\" data-se=\"forgot-password\" class=\"link js-forgot-password\">\\\n        {{i18n code=\"forgotpassword\" bundle=\"login\"}}\\\n        </a>\\\n        </li>\\\n        {{#if features.selfServiceUnlock}}\\\n          <li>\\\n          <a href=\"#\" data-se=\"unlock\" class=\"link js-unlock\">\\\n          {{i18n code=\"unlockaccount\" bundle=\"login\"}}\\\n          </a>\\\n          </li>\\\n        {{/if}}\\\n        {{#each helpLinks.custom}}\\\n          <li>\\\n          <a href=\"{{href}}\" class=\"link js-custom\" rel=\"noopener noreferrer\"\\\n          {{#if target}}target=\"{{target}}\"{{/if}}>{{text}}</a>\\\n          </li>\\\n        {{/each}}\\\n        <li>\\\n        <a href=\"{{helpLinkUrl}}\" data-se=\"help-link\" class=\"link js-help-link\"\\\n          rel=\"noopener noreferrer\" target=\"_blank\">\\\n        {{i18n code=\"help\" bundle=\"login\"}}\\\n        </a>\\\n        </li>\\\n      </ul>\\\n    '\n  ),\n  className: 'auth-footer',\n\n  initialize: function() {\n    this.listenTo(this.state, 'change:enabled', function(model, enable) {\n      this.$('.link').toggleClass('o-form-disabled', !enable);\n    });\n  },\n\n  getTemplateData: function() {\n    let helpLinkUrl;\n    const customHelpPage = this.settings.get('helpLinks.help');\n\n    if (customHelpPage) {\n      helpLinkUrl = customHelpPage;\n    } else {\n      helpLinkUrl = hbs('{{baseUrl}}/help/login')({ baseUrl: this.settings.get('baseUrl') });\n    }\n    return _.extend(this.settings.toJSON({ verbose: true }), { helpLinkUrl: helpLinkUrl });\n  },\n  postRender: function() {\n    this.$('.js-help-links').hide();\n  },\n  toggleLinks: function(e) {\n    e.preventDefault();\n\n    this.$('.js-help-links').slideToggle(200, () => {\n      this.$('.js-help').attr('aria-expanded', this.$('.js-help-links').is(':visible'));\n    });\n  },\n  events: {\n    'click .js-help': function(e) {\n      e.preventDefault();\n      if (!this.state.get('enabled')) {\n        return;\n      }\n\n      this.toggleLinks(e);\n    },\n    'click .js-forgot-password': function(e) {\n      e.preventDefault();\n      if (!this.state.get('enabled')) {\n        return;\n      }\n\n      const customResetPasswordPage = this.settings.get('helpLinks.forgotPassword');\n\n      if (customResetPasswordPage) {\n        Util.redirect(customResetPasswordPage);\n      } else {\n        this.options.appState.trigger('navigate', 'signin/forgot-password');\n      }\n    },\n    'click .js-unlock': function(e) {\n      e.preventDefault();\n      if (!this.state.get('enabled')) {\n        return;\n      }\n\n      const customUnlockPage = this.settings.get('helpLinks.unlock');\n\n      if (customUnlockPage) {\n        Util.redirect(customUnlockPage);\n      } else {\n        this.options.appState.trigger('navigate', 'signin/unlock');\n      }\n    },\n  },\n});\n","/*!\n * Copyright (c) 2016-2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nexport default View.extend({\n  template: hbs(\n    '\\\n        <div class=\"content-container\">\\\n          <span class=\"registration-label\">{{label}}</span>\\\n          <a title=\"{{text}}\" aria-label=\"{{text}}\" class=\"registration-link\" href=\"#\">{{text}}</a>\\\n        </div>\\\n        '\n  ),\n  className: 'registration-container',\n\n  events: {\n    'click a.registration-link': 'handleClickEvent',\n  },\n\n  handleClickEvent: function(e) {\n    e.preventDefault();\n    const clickHandler = this.settings.get('registration.click');\n\n    if (clickHandler) {\n      clickHandler();\n    } else if (this.options.appState.get('isIdxStateToken')) {\n      this.options.appState.trigger('navigate', 'signin/enroll-user');\n    } else {\n      this.options.appState.trigger('navigate', 'signin/register');\n    }\n  },\n\n  getTemplateData: function() {\n    const templateData = {\n      label: loc('registration.signup.label', 'login'),\n      text: loc('registration.signup.text', 'login'),\n    };\n\n    return templateData;\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { $ } from '@okta/courage';\nimport PrimaryAuthModel from 'v1/models/PrimaryAuth';\nimport BaseLoginController from 'v1/util/BaseLoginController';\nimport DeviceFingerprint from 'v1/util/DeviceFingerprint';\nimport CustomButtons from 'v1/views/primary-auth/CustomButtons';\nimport PrimaryAuthForm from 'v1/views/primary-auth/PrimaryAuthForm';\nimport Footer from 'v1/views/shared/Footer';\nimport FooterRegistration from 'v1/views/shared/FooterRegistration';\nimport FooterWithBackLink from 'v1/views/shared/FooterWithBackLink';\nexport default BaseLoginController.extend({\n  className: 'primary-auth',\n\n  state: { enabled: true },\n\n  View: PrimaryAuthForm,\n\n  constructor: function(options) {\n    options.appState.unset('username');\n\n    this.model = new PrimaryAuthModel(\n      {\n        multiOptionalFactorEnroll: options.settings.get('features.multiOptionalFactorEnroll'),\n        settings: options.settings,\n        appState: options.appState,\n      },\n      { parse: true }\n    );\n\n    BaseLoginController.apply(this, arguments);\n\n    this.addListeners();\n\n    // If social auth is configured, 'socialAuthPositionTop' will determine\n    // the order in which the social auth and primary auth are shown on the screen.\n    if (options.settings.get('hasConfiguredButtons')) {\n      this.add(CustomButtons, {\n        prepend: options.settings.get('socialAuthPositionTop'),\n        options: {\n          // To trigger an afterError event, we require the current controller\n          currentController: this,\n        },\n      });\n    }\n\n    this.addFooter(options);\n    if (this.options.appState.get('disableUsername')) {\n      this.addFooterWithBackLink(this.options);\n    }\n\n    this.setUsername();\n  },\n\n  addFooter: function(options) {\n    this.add(new Footer(this.toJSON({ appState: options.appState })));\n\n    if (options.settings.get('features.registration') || options.appState.get('isIdxStateToken')) {\n      this.add(\n        new FooterRegistration({\n          settings: this.settings,\n          appState: options.appState,\n        })\n      );\n    }\n  },\n\n  addFooterWithBackLink: function(options) {\n    if (!this.$el.find('.footer-back-link').length) {\n      this.add(new FooterWithBackLink(this.toJSON({ \n        appState: options.appState,\n        className: 'auth-footer footer-back-link',\n      })));\n    }\n  },\n\n  setUsername: function() {\n    const username = this.model.get('username');\n\n    if (username) {\n      this.options.appState.set('username', username);\n    }\n  },\n\n  setUsernameFromIdpDiscovery: function() {\n    const username = this.options.username;\n    if (username) {\n      this.model.set('username', username);\n      this.options.appState.set('disableUsername', true);\n    }\n  },\n\n  events: {\n    'focusout input[name=username]': function() {\n      if (this.shouldComputeDeviceFingerprint() && this.model.get('username')) {\n        const self = this;\n\n        this.options.appState.trigger('loading', true);\n        DeviceFingerprint.generateDeviceFingerprint(this.settings.get('baseUrl'), this.$el)\n          .then(function(fingerprint) {\n            self.options.appState.set('deviceFingerprint', fingerprint);\n            self.options.appState.set('username', self.model.get('username'));\n          })\n          .catch(function() {\n            // Keep going even if device fingerprint fails\n            self.options.appState.set('username', self.model.get('username'));\n          })\n          .finally(function() {\n            self.options.appState.trigger('loading', false);\n          });\n      } else {\n        this.options.appState.set('username', this.model.get('username'));\n      }\n    },\n    'focusin input': function(e) {\n      $(e.target.parentElement).addClass('focused-input');\n    },\n    'focusout input': function(e) {\n      $(e.target.parentElement).removeClass('focused-input');\n    },\n  },\n\n  // This model and the AppState both have a username property.\n  // The controller updates the AppState's username when the user is\n  // done editing (on blur) or deletes the username (see below).\n  initialize: function() {\n    this.options.appState.unset('deviceFingerprint');\n    if (this.settings.get('features.prefillUsernameFromIdpDiscovery')) {\n      this.setUsernameFromIdpDiscovery();\n    }\n    this.listenTo(this.model, 'change:username', function(model, value) {\n      if (!value) {\n        // reset AppState to an undefined user.\n        this.options.appState.set('username', '');\n      }\n    });\n    this.listenTo(this.model, 'save', function() {\n      this.state.set('enabled', false);\n    });\n    this.listenTo(this.model, 'error', function() {\n      this.state.set('enabled', true);\n      if (this.options.appState.get('disableUsername')) {\n        this.state.set('disableUsername', true);\n        this.addFooterWithBackLink(this.options);\n      }\n    });\n    this.listenTo(this.state, 'togglePrimaryAuthButton', function(buttonState) {\n      this.toggleButtonState(buttonState);\n    });\n  },\n\n  shouldComputeDeviceFingerprint: function() {\n    return (\n      this.settings.get('features.securityImage') &&\n      this.settings.get('features.deviceFingerprinting') &&\n      this.settings.get('features.useDeviceFingerprintForSecurityImage')\n    );\n  },\n});\n","/*!\n * Copyright (c) 2015-2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc } from '@okta/courage';\nimport PrimaryAuthModel from 'v1/models/PrimaryAuth';\nimport CookieUtil from 'util/CookieUtil';\nimport Enums from 'util/Enums';\nimport Util from 'util/Util';\nexport default PrimaryAuthModel.extend({\n  props: function() {\n    const cookieUsername = CookieUtil.getCookieUsername();\n    const properties = this.getUsernameAndRemember(cookieUsername);\n\n    return {\n      username: ['string', true, properties.username],\n      lastUsername: ['string', false, cookieUsername],\n      context: ['object', false],\n      remember: ['boolean', true, properties.remember],\n    };\n  },\n\n  local: {},\n\n  save: function() {\n    const username = this.settings.transformUsername(this.get('username'), Enums.IDP_DISCOVERY);\n    const remember = this.get('remember');\n    const lastUsername = this.get('lastUsername');\n    const resource = 'okta:acct:' + username;\n    const requestContext = this.get('requestContext');\n\n    this.setUsernameCookie(username, remember, lastUsername);\n\n    //the 'save' event here is triggered and used in the BaseLoginController\n    //to disable the primary button\n    this.trigger('save');\n\n    this.appState.trigger('loading', true);\n\n    const webfingerArgs = {\n      resource: resource,\n      requestContext: requestContext,\n    };\n    const authClient = this.appState.settings.getAuthClient();\n\n    authClient\n      .webfinger(webfingerArgs)\n      .then(res => {\n        if (res && res.links && res.links[0]) {\n          if (res.links[0].properties['okta:idp:type'] === 'OKTA') {\n            this.trigger('goToPrimaryAuth');\n          } else if (res.links[0].href) {\n            const redirectFn = res.links[0].href.includes('OKTA_INVALID_SESSION_REPOST%3Dtrue')\n              ? Util.redirectWithFormGet.bind(Util)\n              : this.settings.get('redirectUtilFn');\n            //override redirectFn to only use Util.redirectWithFormGet if OKTA_INVALID_SESSION_REPOST is included\n            //it will be encoded since it will be included in the encoded fromURI\n\n            redirectFn(res.links[0].href);\n          }\n        }\n      })\n      .catch(() => {\n        // webfinger request might fail when corporate proxy checks if request is 'authenticated' using cookies\n        const error = {\n          errorSummary: loc('oform.error.webfinger', 'login'),\n        };\n        this.trigger('error', this, {\n          responseJSON: error,\n        });\n        // Specific event handled by the Header for the case where the security image is not\n        // enabled and we want to show a spinner. (Triggered only here and handled only by Header).\n        this.appState.trigger('removeLoading');\n        CookieUtil.removeUsernameCookie();\n      })\n      .finally(() => {\n        this.appState.trigger('loading', false);\n      });\n  },\n});\n","/*!\n * Copyright (c) 2015-2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport PrimaryAuthForm from 'v1/views/primary-auth/PrimaryAuthForm';\nexport default PrimaryAuthForm.extend({\n  className: 'idp-discovery-form',\n  save: function() {\n    return loc('oform.next', 'login');\n  },\n  saveId: 'idp-discovery-submit',\n\n  initialize: function() {\n    this.listenTo(this, 'save', _.bind(this.model.save, this.model));\n    this.stateEnableChange();\n  },\n\n  inputs: function() {\n    const inputs = [];\n    const usernameProps = {\n      className: 'margin-btm-30',\n      label: loc('primaryauth.username.placeholder', 'login'),\n      inputId: 'idp-discovery-username',\n      disabled: false,\n    };\n\n    inputs.push(_.extend(this.getUsernameField(), usernameProps));\n    if (this.settings.get('features.rememberMe')) {\n      inputs.push(this.getRemeberMeCheckbox());\n    }\n    return inputs;\n  },\n\n  focus: function() {\n    if (!this.model.get('username')) {\n      this.getInputs().first().focus();\n    } else if (this.getInputs().toArray()[1]) {\n      this.getInputs().toArray()[1].focus();\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport PrimaryAuthController from 'v1/controllers/PrimaryAuthController';\nimport IDPDiscoveryModel from 'v1/models/IDPDiscovery';\nimport PrimaryAuthModel from 'v1/models/PrimaryAuth';\nimport BaseLoginController from 'v1/util/BaseLoginController';\nimport IDPDiscoveryForm from 'v1/views/idp-discovery/IDPDiscoveryForm';\nimport CustomButtons from 'v1/views/primary-auth/CustomButtons';\nimport DeviceFingerprint from 'v1/util/DeviceFingerprint';\nimport RouterUtil from 'v1/util/RouterUtil';\nimport Util from 'util/Util';\n\nexport default PrimaryAuthController.extend({\n  className: 'idp-discovery',\n\n  View: IDPDiscoveryForm,\n\n  constructor: function(options) {\n    options.appState.unset('username');\n    let requestContext = options.settings.get('idpDiscovery.requestContext');\n    const lastAuthResponse = options.appState.get('lastAuthResponse');\n    const stateToken = lastAuthResponse && lastAuthResponse?.stateToken;\n\n    //Update requestContext with last stateToken, if the context was stateToken and not a fromUri\n    if(Util.isV1StateToken(requestContext)) {\n      requestContext = stateToken;\n    }\n\n    this.model = new IDPDiscoveryModel(\n      {\n        requestContext: requestContext,\n        settings: options.settings,\n        appState: options.appState,\n      },\n      { parse: true }\n    );\n\n    BaseLoginController.apply(this, arguments);\n\n    this.addListeners();\n\n    // If social auth is configured, 'socialAuthPositionTop' will determine\n    // the order in which the social auth and primary auth are shown on the screen.\n    if (options.settings.get('hasConfiguredButtons')) {\n      this.add(CustomButtons, {\n        prepend: options.settings.get('socialAuthPositionTop'),\n        options: {\n          // To trigger an afterError event, we require the current controller\n          currentController: this,\n        },\n      });\n    }\n\n    this.addFooter(options);\n\n    this.setUsername();\n  },\n\n  initialize: function() {\n    PrimaryAuthController.prototype.initialize.apply(this);\n\n    this.listenTo(this.model, 'goToPrimaryAuth', function() {\n      this.settings.set('username', this.model.get('username'));\n      const self = this;\n      if (this.settings.get('features.deviceFingerprinting')) {\n        DeviceFingerprint.generateDeviceFingerprint(this.settings.get('baseUrl'), this.$el)\n          .then(function(fingerprint) {\n            self.options.appState.set('deviceFingerprint', fingerprint);\n            self.options.appState.set('username', self.model.get('username'));\n          })\n          .catch(function() {\n          // Keep going even if device fingerprint fails\n            self.options.appState.set('username', self.model.get('username'));\n          })\n          .finally(function() {\n            self.doPrimaryAuth();\n          });\n      } else {\n        self.doPrimaryAuth();\n      }\n    });\n  },\n\n  doPrimaryAuth : function() {\n    if (this.settings.get('features.passwordlessAuth')) {\n      const primaryAuthModel = new PrimaryAuthModel(\n        {\n          username: this.model.get('username'),\n          multiOptionalFactorEnroll: this.options.settings.get('features.multiOptionalFactorEnroll'),\n          settings: this.options.settings,\n          appState: this.options.appState,\n        },\n        { parse: true }\n      );\n\n      // Events to set the transaction attributes on the app state.\n      this.listenTo(primaryAuthModel, 'error', function(src, errObj) {\n        this.toggleButtonState(false);\n        this.model.trigger('error', this.model, errObj);\n      });\n      this.addModelListeners(primaryAuthModel);\n      // Make the primary auth request\n      primaryAuthModel.save();\n    } else {\n      this.options.appState.set('disableUsername', true);\n      const url = RouterUtil.createSigninUrl(\n        this.settings.get('features.prefillUsernameFromIdpDiscovery') && this.model.get('username')\n      );\n      this.options.appState.trigger('navigate', url);\n    }\n  },\n\n});\n","/*!\n * Copyright (c) 2015-2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport Spinner from 'v1/views/shared/Spinner';\nimport BaseLoginController from 'v1/util/BaseLoginController';\nimport Util from 'util/Util';\n\nexport default BaseLoginController.extend({\n  className: 'force-idp-discovery',\n\n  View: Spinner,\n\n  Model: {},\n\n  initialize: function() {\n    const OKTA_IDP_TYPE = 'OKTA';\n    const RESOURCE = 'okta:acct:';\n\n    const options = this.options;\n    const lastAuthResponse = options.appState.get('lastAuthResponse');\n    const stateToken = lastAuthResponse && lastAuthResponse?.stateToken;\n\n    const webfingerArgs = {\n      resource: RESOURCE,\n      requestContext: stateToken,\n    };\n\n    options.appState.settings.getAuthClient()\n      .webfinger(webfingerArgs)\n      .then(res => {\n        if (res?.links && res.links[0]) {\n          if (res.links[0].properties['okta:idp:type'] !== OKTA_IDP_TYPE && res.links[0].href) {\n            const redirectFn = res.links[0].href.includes('OKTA_INVALID_SESSION_REPOST%3Dtrue')\n              ? Util.redirectWithFormGet.bind(Util)\n              : this.settings.get('redirectUtilFn');\n            //override redirectFn to only use Util.redirectWithFormGet if OKTA_INVALID_SESSION_REPOST is included\n            //it will be encoded since it will be included in the encoded fromURI\n\n            redirectFn(res.links[0].href);\n            return;\n          }\n        }\n        options.appState.trigger('navigate', '');\n      })\n      .catch(() => {\n        // TODO: OKTA-436775 Show error instead of navigating to default route\n        options.appState.trigger('navigate', '');\n      });\n  },\n\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport RouterUtil from 'v1/util/RouterUtil';\n\nfunction goToFactorActivation(appState) {\n  const url = RouterUtil.createActivateFactorUrl(\n    appState.get('activatedFactorProvider'),\n    appState.get('activatedFactorType')\n  );\n\n  appState.trigger('navigate', url);\n}\n\nexport default View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help js-back\" data-se=\"back-link\">\\\n        {{i18n code=\"mfa.backToFactors\" bundle=\"login\"}}\\\n      </a>\\\n      <a href=\"#\" class=\"link help goto js-goto\" data-se=\"goto-link\">\\\n        {{i18n code=\"mfa.scanBarcode\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .js-back': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n    'click .js-goto': function(e) {\n      e.preventDefault();\n\n      const goToFactor = _.partial(goToFactorActivation, this.options.appState);\n\n      this.options.appState.unset('factorActivationType');\n      this.model\n        .doTransaction(function(transaction) {\n          return transaction.prev().then(function(trans) {\n            const factor = _.findWhere(trans.factors, {\n              factorType: 'push',\n              provider: 'OKTA',\n            });\n\n            return factor.enroll();\n          });\n        })\n        .then(goToFactor);\n    },\n  },\n  back: function() {\n    const self = this;\n\n    self.options.appState.unset('factorActivationType');\n    if (self.options.appState.get('prevLink')) {\n      this.model\n        .doTransaction(function(transaction) {\n          return transaction.prev();\n        })\n        .then(function() {\n          // we trap 'MFA_ENROLL' response that's why we need to trigger navigation from here\n          self.options.appState.trigger('navigate', 'signin/enroll');\n        });\n    } else {\n      self.options.appState.trigger('navigate', 'signin/enroll');\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport CountryUtil from 'util/CountryUtil';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport RouterUtil from 'v1/util/RouterUtil';\nimport Footer from 'v1/views/enroll-factors/ManualSetupPushFooter';\nimport PhoneTextBox from 'v1/views/enroll-factors/PhoneTextBox';\n\nfunction goToFactorActivation(view, step) {\n  const url = RouterUtil.createActivateFactorUrl(\n    view.options.appState.get('activatedFactorProvider'),\n    view.options.appState.get('activatedFactorType'),\n    step\n  );\n\n  view.options.appState.trigger('navigate', url);\n}\n\nfunction setStateValues(view) {\n  let userPhoneNumber;\n  let userCountryCode;\n\n  if (view.model.get('activationType') === 'SMS') {\n    userCountryCode = view.model.get('countryCode');\n    userPhoneNumber = view.model.get('phoneNumber');\n  }\n  view.options.appState.set({\n    factorActivationType: view.model.get('activationType'),\n    userCountryCode: userCountryCode,\n    userPhoneNumber: userPhoneNumber,\n  });\n}\n\nfunction enrollFactor(view, factorType) {\n  return view.model.doTransaction(function(transaction) {\n    return transaction\n      .prev()\n      .then(function(trans) {\n        const factor = _.findWhere(trans.factors, {\n          factorType: factorType,\n          provider: 'OKTA',\n        });\n\n        return factor.enroll();\n      })\n      .then(function(trans) {\n        let textActivationLinkUrl;\n        let emailActivationLinkUrl;\n        let sharedSecret;\n        const res = trans.data;\n\n        if (\n          res &&\n          res._embedded &&\n          res._embedded.factor &&\n          res._embedded.factor._embedded &&\n          res._embedded.factor._embedded.activation\n        ) {\n          const factor = res._embedded.factor;\n\n          // Shared secret\n          sharedSecret = factor._embedded.activation.sharedSecret;\n\n          if (factor._embedded.activation._links && factor._embedded.activation._links.send) {\n            const activationSendLinks = factor._embedded.activation._links.send;\n\n            const smsItem = _.findWhere(activationSendLinks, { name: 'sms' });\n\n            // SMS activation url\n\n            textActivationLinkUrl = smsItem ? smsItem.href : null;\n\n            // Email activation url\n\n            const emailItem = _.findWhere(activationSendLinks, { name: 'email' });\n\n            emailActivationLinkUrl = emailItem ? emailItem.href : null;\n          }\n        }\n\n        view.model.set({\n          SMS: textActivationLinkUrl,\n          EMAIL: emailActivationLinkUrl,\n          sharedSecret: sharedSecret,\n        });\n\n        return trans;\n      });\n  });\n}\n\nexport default FormController.extend({\n  className: 'enroll-manual-push',\n  Model: function() {\n    return {\n      local: {\n        activationType: ['string', true, this.options.appState.get('factorActivationType') || 'SMS'],\n        countryCode: ['string', false, this.options.appState.get('userCountryCode')],\n        phoneNumber: 'string',\n        SMS: ['string', false, this.options.appState.get('textActivationLinkUrl')],\n        EMAIL: ['string', false, this.options.appState.get('emailActivationLinkUrl')],\n        sharedSecret: ['string', false, this.options.appState.get('sharedSecret')],\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n      derived: {\n        countryCallingCode: {\n          deps: ['countryCode'],\n          fn: function(countryCode) {\n            return '+' + CountryUtil.getCallingCodeForCountry(countryCode);\n          },\n        },\n        fullPhoneNumber: {\n          deps: ['countryCallingCode', 'phoneNumber'],\n          fn: function(countryCallingCode, phoneNumber) {\n            return countryCallingCode + phoneNumber;\n          },\n        },\n      },\n    };\n  },\n\n  Form: {\n    title: function() {\n      const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n\n      return loc('enroll.totp.title', 'login', [factorName]);\n    },\n    subtitle: _.partial(loc, 'enroll.totp.cannotScanBarcode', 'login'),\n    noButtonBar: true,\n    attributes: { 'data-se': 'step-manual-setup' },\n\n    formChildren: function() {\n      const instructions = this.settings.get('brandName')\n        ? loc('enroll.totp.sharedSecretInstructions.specific', 'login', [this.settings.get('brandName')])\n        : loc('enroll.totp.sharedSecretInstructions.generic', 'login');\n      const children = [\n        FormType.Input({\n          name: 'activationType',\n          label:loc('mfa.setupOptions', 'login'),\n          type: 'select',\n          wide: true,\n          options: {\n            SMS: loc('enroll.totp.sendSms', 'login'),\n            EMAIL: loc('enroll.totp.sendEmail', 'login'),\n            MANUAL: loc('enroll.totp.setupManually', 'login'),\n          },\n        }),\n        FormType.Input({\n          label:loc('mfa.country', 'login'),\n          name: 'countryCode',\n          type: 'select',\n          wide: true,\n          options: CountryUtil.getCountries(),\n          showWhen: { activationType: 'SMS' },\n        }),\n        FormType.Input({\n          label: loc('mfa.phoneNumber.placeholder', 'login'),\n          'label-top': true,\n          className: 'enroll-sms-phone',\n          name: 'phoneNumber',\n          input: PhoneTextBox,\n          type: 'text',\n          showWhen: { activationType: 'SMS' },\n        }),\n        FormType.View({\n          View: View.extend({\n            className: 'secret-key-instructions',\n            attributes: { 'data-se': 'secret-key-instructions'},\n            template: hbs`\n             <section aria-live=\"assertive\">\n                <p  class=\"okta-form-subtitle o-form-explain text-align-c\">\n                  {{instructions}}\n                </p>\n                <p class=\"shared-key margin-top-10\" tabindex=0 \n                aria-label=\"{{i18n code=\"enroll.totp.sharedSecretInstructions.aria.secretKey\" bundle=\"login\"\n                arguments=\"sharedSecretKey\"}}\">{{sharedSecretKey}}</p>\n              </section>\n              `,\n            initialize: function(){\n              this.listenTo(this.model, 'change:sharedSecret', this.render);\n            },\n            getTemplateData: function() {\n              return {\n                instructions: instructions,\n                sharedSecretKey: this.model.get('sharedSecret')\n              };\n            },\n          }),\n          showWhen: { activationType: 'MANUAL' },\n        }),\n        FormType.View({\n          View: View.extend({\n            template: hbs('<div data-type=\"next-button-wrap\"></div>'),\n          }),\n          showWhen: { activationType: 'MANUAL' },\n        }),\n        FormType.Button(\n          {\n            title: loc('oform.next', 'login'),\n            className: 'button button-primary button-wide button-next',\n            attributes: { 'data-se': 'next-button' },\n            click: () => {\n              setStateValues(this);\n              goToFactorActivation(this, 'passcode');\n            },\n          },\n          '[data-type=\"next-button-wrap\"]'\n        ),\n        FormType.Toolbar({\n          noCancelButton: true,\n          save: loc('oform.send', 'login'),\n          showWhen: {\n            activationType: function(val) {\n              return val === 'SMS' || val === 'EMAIL';\n            },\n          },\n        }),\n      ];\n\n      return children;\n    },\n  },\n\n  Footer: Footer,\n\n  initialize: function() {\n    this.setInitialModel();\n    // Move this logic to a model when AuthClient supports sending email and sms\n    this.listenTo(this.form, 'save', function() {\n      const self = this;\n\n      this.model.doTransaction(function(transaction) {\n        const activationType = this.get('activationType').toLowerCase();\n        const opts = {};\n\n        if (activationType === 'sms') {\n          opts.profile = { phoneNumber: this.get('fullPhoneNumber') };\n        }\n\n        return transaction.factor.activation.send(activationType, opts).then(function(trans) {\n          setStateValues(self);\n          // Note: Need to defer because OktaAuth calls our router success\n          // handler on the next tick - if we immediately called, appState would\n          // still be populated with the last response\n          _.defer(function() {\n            goToFactorActivation(self, 'sent');\n          });\n          return trans;\n        });\n      });\n    });\n\n    this.listenTo(this.model, 'change:activationType', function(model, value) {\n      this.form.clearErrors();\n      if (value === 'MANUAL' && this.options.appState.get('activatedFactorType') !== 'token:software:totp') {\n        enrollFactor(this, 'token:software:totp');\n      } else if (this.options.appState.get('activatedFactorType') !== 'push') {\n        enrollFactor(this, 'push');\n      }\n    });\n  },\n\n  setInitialModel: function() {\n    if (this.options.appState.get('factorActivationType') === 'SMS') {\n      this.model.set({\n        countryCode: this.options.appState.get('userCountryCode') || 'US',\n        phoneNumber: this.options.appState.get('userPhoneNumber'),\n      });\n    }\n  },\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaEnrollActivate') || this.options.appState.get('isMfaEnroll')) {\n      return true;\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\n\nexport default View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help js-back\" data-se=\"back-link\">\\\n        {{i18n code=\"mfa.backToFactors\" bundle=\"login\"}}\\\n      </a>\\\n      <a href=\"#\" class=\"link help goto js-goto\" data-se=\"goto-link\">\\\n        {{i18n code=\"mfa.scanBarcode\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .js-back': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n    'click .js-goto': function(e) {\n      e.preventDefault();\n      // go to a different screen with current auth status:\n      // refresh the latest response\n      this.model.startTransaction(function(authClient) {\n        return authClient.tx.resume();\n      });\n    },\n  },\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    if (this.options.appState.get('prevLink')) {\n      // Once we are in the MFA_ENROLL_ACTIVATE, we need to reset to the\n      // correct state. Fortunately, this means that the router will\n      // handle navigation once the request is finished.\n      this.model.doTransaction(function(transaction) {\n        return transaction.prev();\n      });\n    } else {\n      this.options.appState.trigger('navigate', 'signin/enroll');\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport RouterUtil from 'v1/util/RouterUtil';\nimport ManualSetupFooter from 'v1/views/enroll-factors/ManualSetupFooter';\nexport default FormController.extend({\n  className: 'enroll-manual-totp',\n  Model: function() {\n    return {\n      local: {\n        sharedSecret: ['string', false, this.options.appState.get('sharedSecret')],\n        __factorType__: ['string', false, this.options.factorType],\n        __provider__: ['string', false, this.options.provider],\n      },\n    };\n  },\n\n  Form: {\n    title: function() {\n      const factorName = FactorUtil.getFactorLabel(this.model.get('__provider__'), this.model.get('__factorType__'));\n\n      return loc('enroll.totp.title', 'login', [factorName]);\n    },\n    subtitle: _.partial(loc, 'enroll.totp.cannotScanBarcode', 'login'),\n    noButtonBar: true,\n    attributes: { 'data-se': 'step-manual-setup' },\n\n    formChildren: function() {\n      const instructions = this.settings.get('brandName')\n        ? loc('enroll.totp.manualSetupInstructions.specific', 'login', [this.settings.get('brandName')])\n        : loc('enroll.totp.manualSetupInstructions.generic', 'login');\n\n      return [\n        FormType.View({\n          View: View.extend({\n            className: 'secret-key-instructions',\n            attributes: { 'data-se': 'secret-key-instructions'},\n            template: hbs`\n             <section aria-live=\"assertive\">\n                <p  class=\"okta-form-subtitle o-form-explain text-align-c\">\n                  {{instructions}}\n                </p>\n                <p class=\"shared-key margin-top-10\" tabindex=0 \n                aria-label=\"{{i18n code=\"enroll.totp.sharedSecretInstructions.aria.secretKey\" bundle=\"login\"\n                arguments=\"sharedSecretKey\"}}\">{{sharedSecretKey}}</p>\n              </section>\n              `,\n            initialize: function(){\n              this.listenTo(this.model, 'change:sharedSecret', this.render);\n            },\n            getTemplateData: function() {\n              return {\n                instructions: instructions,\n                sharedSecretKey: this.model.get('sharedSecret')\n              };\n            },\n          })\n        }),\n        FormType.Toolbar({\n          noCancelButton: true,\n          save: loc('oform.next', 'login'),\n        }),\n      ];\n    },\n  },\n\n  Footer: ManualSetupFooter,\n\n  initialize: function() {\n    this.listenTo(this.form, 'save', function() {\n      const url = RouterUtil.createActivateFactorUrl(\n        this.model.get('__provider__'),\n        this.model.get('__factorType__'),\n        'activate'\n      );\n\n      this.options.appState.trigger('navigate', url);\n    });\n  },\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n/* eslint complexity: [2, 7] */\nimport { Form, createButton, loc } from '@okta/courage';\nimport Q from 'q';\nimport Enums from 'util/Enums';\nexport default Form.extend({\n  layout: 'o-form-theme',\n  className: 'factor-verify-magiclink',\n  autoSave: true,\n  noCancelButton: true,\n  initialize: function() {\n    const form = this;\n    // for FACTOR_REQUIRED with email magic link we dont need to show otp code input field and verify button\n\n    this.title = this.model.get('factorLabel');\n    //TODO: OKTA-211618 Temp fix for demo. FACTOR_REQUIRED after sign up is missing the profile object in API response\n\n    const email = this.model.get('email') || this.options.appState.get('lastAuthResponse')._embedded.user.profile.login;\n\n    this.subtitle = '(' + email + ')';\n    this.add(\n      createButton({\n        attributes: { 'data-se': 'email-send-code' },\n        className: 'button email-request-button',\n        title: loc('mfa.sendEmail', 'login'),\n        click: function() {\n          form.clearErrors();\n          this.disable();\n          this.options.title = loc('mfa.sent', 'login');\n          this.render();\n          this.model\n            .save()\n            .then(() => {\n              return Q.delay(Enums.API_RATE_LIMIT);\n            })\n            .then(() => {\n              this.options.title = loc('mfa.resendEmail', 'login');\n              this.enable();\n              this.render();\n            });\n        },\n      })\n    );\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc, createButton, Form } from '@okta/courage';\nimport TextBox from 'v1/views/shared/TextBox';\n\nfunction addInlineTotp(form) {\n  form.addDivider();\n  form.addInput({\n    label: loc('mfa.challenge.enterCode.placeholder', 'login'),\n    'label-top': true,\n    className: 'o-form-fieldset o-form-label-top inline-input auth-passcode',\n    name: 'answer',\n    input: TextBox,\n    type: 'tel',\n  });\n  form.add(\n    createButton({\n      attributes: { 'data-se': 'inline-totp-verify' },\n      className: 'button inline-totp-verify margin-top-30',\n      title: loc('mfa.challenge.verify', 'login'),\n      click: function() {\n        form.clearErrors();\n        if (!form.isValid()) {\n          return;\n        }\n        form.model.manageTransaction(function(transaction, setTransaction) {\n          // This is the case where we enter the TOTP code and verify while there is an\n          // active Push request (or polling) running. We need to invoke previous() on authClient\n          // and then call model.save(). If not, we would still be in MFA_CHALLENGE state and\n          // verify would result in a wrong request (push verify instead of a TOTP verify).\n          if (transaction.status === 'MFA_CHALLENGE' && transaction.prev) {\n            form.options.appState.set('trapMfaRequiredResponse', true);\n            return transaction.prev().then(function(trans) {\n              setTransaction(trans);\n              form.model.save();\n            });\n          } else {\n            // Push is not active and we enter the code to verify.\n            form.model.save();\n          }\n        });\n      },\n    })\n  );\n  form.at(1).focus();\n}\n\nexport default Form.extend({\n  autoSave: true,\n  noButtonBar: true,\n  scrollOnError: false,\n  layout: 'o-form-theme',\n\n  className: 'mfa-verify-totp-inline',\n\n  attributes: { 'data-se': 'factor-inline-totp' },\n\n  initialize: function() {\n    const form = this;\n\n    this.listenTo(this.model, 'error', function() {\n      this.clearErrors();\n    });\n    this.add(\n      createButton({\n        className: 'link',\n        attributes: { 'data-se': 'inline-totp-add' },\n        title: loc('mfa.challenge.orEnterCode', 'login'),\n        click: function() {\n          this.remove();\n          addInlineTotp(form);\n        },\n      })\n    );\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 7] */\nimport { _, loc, Form, createButton, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Q from 'q';\nimport Enums from 'util/Enums';\nimport TextBox from 'v1/views/shared/TextBox';\nconst subtitleTpl = hbs('({{subtitle}})');\nconst PassCodeFormwarningTemplate = View.extend({\n  className: 'okta-form-infobox-warning infobox infobox-warning login-timeout-warning',\n  attributes: {\n    'aria-live': 'polite',\n  },\n  template: hbs`\n      <span class=\"icon warning-16\"></span>\n      <p>{{{warning}}}</p>\n    `,\n});\n\nfunction getFormAndButtonDetails(factorType) {\n  switch (factorType) {\n  case 'sms':\n    return {\n      buttonDataSe: 'sms-send-code',\n      buttonClassName: 'sms-request-button',\n      formSubmit: loc('mfa.sendCode', 'login'),\n      formRetry: loc('mfa.resendCode', 'login'),\n      formSubmitted: loc('mfa.sent', 'login'),\n      subtitle: subtitleTpl({ subtitle: this.model.get('phoneNumber') }),\n      warning: hbs`{{i18n\n        code=\"factor.sms.time.warning\"\n        bundle=\"login\"\n        $1=\"<b>$1</b>\"\n      }}`,\n    };\n  case 'call':\n    return {\n      buttonDataSe: 'make-call',\n      buttonClassName: 'call-request-button',\n      formSubmit: loc('mfa.call', 'login'),\n      formRetry: loc('mfa.redial', 'login'),\n      formSubmitted: loc('mfa.calling', 'login'),\n      subtitle: subtitleTpl({ subtitle: this.model.get('phoneNumber') }),\n      warning: hbs`{{i18n\n        code=\"factor.call.time.warning\"\n        bundle=\"login\"\n        $1=\"<b>$1</b>\"\n      }}`,\n    };\n  case 'email':\n    return {\n      buttonDataSe: 'email-send-code',\n      buttonClassName: 'email-request-button',\n      formSubmit: loc('mfa.sendEmail', 'login'),\n      formRetry: loc('mfa.resendEmail', 'login'),\n      formSubmitted: loc('mfa.sent', 'login'),\n      subtitle: subtitleTpl({ subtitle: this.model.get('email') }),\n    };\n  default:\n    return {\n      buttonDataSe: '',\n      buttonClassName: '',\n      formSubmit: '',\n      formRetry: '',\n      formSubmitted: '',\n    };\n  }\n}\n\nexport default Form.extend({\n  className: 'mfa-verify-passcode',\n  autoSave: true,\n  noCancelButton: true,\n  save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n  scrollOnError: false,\n  layout: 'o-form-theme',\n\n  disableSubmitButton: function() {\n    return this.model.appState.get('isMfaChallenge') && this.model.get('answer');\n  },\n\n  showWarning: function(msg) {\n    this.clearWarnings();\n    this.add(PassCodeFormwarningTemplate, '.o-form-error-container', { options: { warning: msg } });\n  },\n  clearWarnings: function() {\n    this.$('.okta-form-infobox-warning').remove();\n  },\n\n  initialize: function() {\n    const form = this;\n\n    this.title = this.model.get('factorLabel');\n\n    const factorType = this.model.get('factorType');\n    const formAndButtonDetails = getFormAndButtonDetails.call(this, factorType);\n    const warningDetails = formAndButtonDetails.warning;\n\n    this.$el.attr('data-se', 'factor-' + factorType);\n\n    this.subtitle = formAndButtonDetails.subtitle;\n    this.listenTo(this.model, 'error', function() {\n      this.clearErrors();\n    });\n    this.addInput({\n      label: loc('mfa.challenge.enterCode.placeholder', 'login'),\n      'label-top': true,\n      className: 'o-form-fieldset o-form-label-top auth-passcode',\n      name: 'answer',\n      input: TextBox,\n      type: 'tel',\n    });\n    this.add(\n      createButton({\n        attributes: { 'data-se': formAndButtonDetails.buttonDataSe },\n        className: 'button ' + formAndButtonDetails.buttonClassName,\n        title: formAndButtonDetails.formSubmit,\n        click: function() {\n          form.clearErrors();\n          this.disable();\n          form.clearWarnings();\n          this.options.title = formAndButtonDetails.formSubmitted;\n          this.render();\n          // To send an OTP to the device, make the same request but use\n          // an empty passCode\n          this.model.set('answer', '');\n          this.model\n            .save()\n            .then(function() {\n              // render and focus on the passcode input field.\n              form.getInputs().first().render().focus();\n              return Q.delay(Enums.API_RATE_LIMIT);\n            })\n            .then(() => {\n              this.options.title = formAndButtonDetails.formRetry;\n              this.enable();\n              if (factorType === 'call' || factorType === 'sms') {\n                form.showWarning(warningDetails);\n              }\n              this.render();\n            });\n        },\n      })\n    );\n    if (this.options.appState.get('allowRememberDevice')) {\n      this.addInput({\n        label: false,\n        'label-top': true,\n        placeholder: this.options.appState.get('rememberDeviceLabel'),\n        className: 'margin-btm-0',\n        name: 'rememberDevice',\n        type: 'checkbox',\n      });\n    }\n  },\n});\n","/*!\n * Copyright (c) 2016-2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Form, loc } from '@okta/courage';\nexport default Form.extend({\n  className: 'mfa-verify-password',\n  autoSave: true,\n  noCancelButton: true,\n  save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n  scrollOnError: false,\n  layout: 'o-form-theme',\n  attributes: { 'data-se': 'factor-password' },\n\n  initialize: function() {\n    this.title = this.model.get('factorLabel');\n\n    this.addInput({\n      label: loc('mfa.challenge.password.placeholder', 'login'),\n      'label-top': true,\n      className: 'auth-passcode',\n      name: 'password',\n      type: 'password',\n      params: {\n        showPasswordToggle: true,\n      },\n    });\n\n    if (this.options.appState.get('allowRememberDevice')) {\n      this.addInput({\n        label: false,\n        'label-top': true,\n        placeholder: this.options.appState.get('rememberDeviceLabel'),\n        className: 'margin-btm-0',\n        name: 'rememberDevice',\n        type: 'checkbox',\n      });\n    }\n  },\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nexport default View.extend({\n  className: 'number-challenge-view',\n  template: hbs`\n      <p data-se=\"number-challenge-instruction\">\n        {{{i18n code=\"oktaverify.numberchallenge.instruction\" bundle=\"login\" arguments=\"number\"}}}\n      </p>\n      <div class=\"phone\">\n        <div class=\"phone--body\">\n          <div class=\"phone--screen\">\n            <span class=\"phone--number\" data-se=\"challenge-number\">{{number}}</span>\n          </div>\n          <div class=\"phone--home-button\"></div>\n        </div>\n      </div>\n      <p>{{i18n code=\"oktaverify.numberchallenge.explain\"  bundle=\"login\"}}</p>\n    `,\n  initialize() {\n    this.listenTo(this.options.appState, 'change:isWaitingForNumberChallenge', () => {\n      if (this.options.appState.get('lastAuthResponse').status !== 'SUCCESS') {\n        this.render();\n      }\n    });\n  },\n  getTemplateData() {\n    const lastAuthResponse = this.options.appState.get('lastAuthResponse');\n    if (!this.options.appState.get('isWaitingForNumberChallenge')) {\n      return {\n        number: null,\n      };\n    }\n    return {\n      number: lastAuthResponse._embedded.factor._embedded.challenge.correctAnswer,\n    };\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Form, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Util from 'util/Util';\nimport NumberChallengeView from './NumberChallengeView';\n\nconst titleTpl = hbs('{{factorName}} ({{{deviceName}}})');\n// deviceName is escaped on BaseForm (see BaseForm's template)\n\nconst WARNING_TIMEOUT = 30000; // milliseconds\nconst PushFormwarningTemplate = View.extend({\n  className: 'okta-form-infobox-warning infobox infobox-warning',\n  attributes: {\n    'aria-live': 'polite',\n  },\n  template: hbs`\n      <span class=\"icon warning-16\"></span>\n      <p>{{warning}}</p>\n    `,\n});\n\nexport default Form.extend({\n  className: 'mfa-verify-push',\n  autoSave: true,\n  noCancelButton: true,\n  save: _.partial(loc, 'oktaverify.send', 'login'),\n  scrollOnError: false,\n  layout: 'o-form-theme',\n  attributes: { 'data-se': 'factor-push' },\n  events: {\n    submit: 'submit',\n  },\n\n  initialize: function() {\n    this.enabled = true;\n    this.listenTo(this.options.appState, 'change:isMfaRejected', this.handleRejectStateChange);\n\n    this.numberChallengeView = this.add(NumberChallengeView).last();\n    this.listenTo(this.options.appState, 'change:isWaitingForNumberChallenge', function(\n      state,\n      isWaitingForNumberChallenge\n    ) {\n      if (isWaitingForNumberChallenge || this.options.appState.get('lastAuthResponse').status === 'SUCCESS') {\n        this.clearWarnings();\n        this.$el.find('.button').hide();\n        this.numberChallengeView.$el.show();\n      } else {\n        this.numberChallengeView.$el.hide();\n        this.$el.find('.button').show();\n      }\n    });\n    this.listenTo(this.options.appState, 'change:isMfaTimeout', function(state, isMfaTimeout) {\n      this.setSubmitState(isMfaTimeout);\n      if (isMfaTimeout) {\n        this.showError(loc('oktaverify.timeout', 'login'));\n      }\n    });\n    this.listenTo(this.options.appState, 'change:isMfaRequired', function(state, isMfaRequired) {\n      if (isMfaRequired) {\n        this.clearErrors();\n        this.clearWarnings();\n      }\n    });\n    this.title = titleTpl({\n      factorName: this.model.get('factorLabel'),\n      deviceName: this.model.get('deviceName'),\n    });\n  },\n  setSubmitState: function(ableToSubmit) {\n    const button = this.$el.find('.button');\n    const a11ySpan = this.$el.find('.accessibility-text');\n    this.enabled = ableToSubmit;\n    if (ableToSubmit) {\n      button.removeClass('link-button-disabled');\n      button.prop('value', loc('oktaverify.send', 'login'));\n      button.prop('disabled', false);\n      if (a11ySpan) {\n        a11ySpan.remove();\n      }\n    } else {\n      button.addClass('link-button-disabled');\n      button.prop('value', loc('oktaverify.sent', 'login'));\n      button.prop('disabled', true);\n      this.add(\n        `<span class='accessibility-text' role='alert'>${loc('oktaverify.sent', 'login')}</span>`,\n      );\n    }\n  },\n  submit: function(e) {\n    if (e !== undefined) {\n      e.preventDefault();\n    }\n    if (this.enabled) {\n      this.setSubmitState(false);\n      this.doSave();\n    }\n  },\n  postRender: function() {\n    const factorsPolicyInfo = this.options.appState.get('factorsPolicyInfo');\n    const id = this.model.get('id');\n    const isAutoPushEnabled = this.settings.get('features.autoPush') && factorsPolicyInfo && factorsPolicyInfo[id]\n      ? factorsPolicyInfo[id]['autoPushEnabled']\n      : false;\n\n    if (isAutoPushEnabled) {\n      this.model.set('autoPush', true);\n      // bind after $el has been rendered, and trigger push once DOM is fully loaded\n      _.defer(_.bind(this.submit, this));\n    }\n  },\n  doSave: function() {\n    let warningTimeout;\n\n    this.clearErrors();\n    this.clearWarnings();\n    if (this.model.isValid()) {\n      this.listenToOnce(this.model, 'error', function() {\n        this.setSubmitState(true);\n        this.clearWarnings();\n        clearTimeout(warningTimeout);\n      });\n      this.trigger('save', this.model);\n      warningTimeout = Util.callAfterTimeout(() => {\n        if (!this.options.appState.get('isWaitingForNumberChallenge')) {\n          this.showWarning(loc('oktaverify.warning', 'login'));\n        }\n      }, WARNING_TIMEOUT);\n    }\n  },\n  showError: function(msg) {\n    this.clearWarnings();\n    this.model.trigger('error', this.model, { responseJSON: { errorSummary: msg } });\n  },\n  showWarning: function(msg) {\n    this.clearWarnings();\n    this.add(PushFormwarningTemplate, '.o-form-error-container', { options: { warning: msg } });\n  },\n  clearWarnings: function() {\n    this.$('.okta-form-infobox-warning').remove();\n  },\n  handleRejectStateChange: function(state, isMfaRejected) {\n    if (isMfaRejected) {\n      this.setSubmitState(isMfaRejected);\n      this.setRejectedErrorMessage();\n    }\n  },\n  setRejectedErrorMessage: function() {\n    // If rejection is due to outdated app, show error message per platform\n    // else show user rejected message.\n    if (this.options.appState.get('lastAuthResponse').factorResultMessage === 'OKTA_VERIFY_UPGRADE_REQUIRED') {\n      if (this.options.appState.get('factor').profile.platform === 'IOS') {\n        this.showError(loc('oktaverify.rejected.upgradeRequired.ios', 'login'));\n      } else {\n        this.showError(loc('oktaverify.rejected.upgradeRequired.android', 'login'));\n      }\n    } else {\n      this.showError(loc('oktaverify.rejected', 'login'));\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Form, loc } from '@okta/courage';\nexport default Form.extend({\n  className: 'mfa-verify-question',\n  autoSave: true,\n  noCancelButton: true,\n  save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n  scrollOnError: false,\n  layout: 'o-form-theme',\n  attributes: { 'data-se': 'factor-question' },\n\n  initialize: function() {\n    this.title = this.model.get('factorLabel');\n\n    this.addInput({\n      label: this.model.get('securityQuestion'),\n      'label-top': true,\n      placeholder: loc('mfa.challenge.answer.placeholder', 'login'),\n      className: 'auth-passcode',\n      name: 'answer',\n      type: 'password',\n      params: {\n        showPasswordToggle: true,\n      },\n    });\n\n    if (this.options.appState.get('allowRememberDevice')) {\n      this.addInput({\n        label: false,\n        'label-top': true,\n        placeholder: this.options.appState.get('rememberDeviceLabel'),\n        className: 'margin-btm-0',\n        name: 'rememberDevice',\n        type: 'checkbox',\n      });\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Form, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport ResendEmailView from 'v1/views/ResendEmailView';\nimport TextBox from 'v1/views/shared/TextBox';\n\nconst createEmailMaskElement = function() {\n  const email = this.model.get('email');\n  const emailTpl = hbs('<span class=\"mask-email\">{{email}}</span>');\n  return { factorEmail: emailTpl({ email }) };\n};\n\nconst SendEmailAndVerifyCodeFormVerifyEmailCodeForm = Form.extend({\n  layout: 'o-form-theme',\n  className: 'mfa-verify-email',\n  title: _.partial(loc, 'email.mfa.title', 'login'),\n  noButtonBar: false,\n  autoSave: true,\n  noCancelButton: true,\n  attributes: {\n    'data-se': 'factor-email',\n  },\n  save: function() {\n    return this.options.appState.get('isMfaChallenge')\n      ? loc('mfa.challenge.verify', 'login')\n      : loc('email.button.send', 'login');\n  },\n\n  events: Object.assign({}, Form.prototype.events, {\n    submit: function(e) {\n      e.preventDefault();\n      this.handleSubmit();\n    },\n  }),\n\n  handleSubmit() {\n    this.clearErrors();\n    if (this.options.appState.get('isMfaChallenge')) {\n      if (this.isValid()) {\n        this.model.save();\n      }\n    } else {\n      // Send email and switch to verification view\n      this.model.set('answer', '');\n      this.model.save().then(this.renderChallengView.bind(this));\n    }\n  },\n\n  initialize: function() {\n    Form.prototype.initialize.apply(this, arguments);\n\n    // render 'Send Email' page at first place\n    this.add(\n      View.extend({\n        attributes: {\n          'data-se': 'mfa-send-email-content',\n        },\n        className: 'mfa-send-email-content',\n        template: hbs('{{{i18n code=\"email.mfa.description\" bundle=\"login\" arguments=\"factorEmail\"}}}'),\n        getTemplateData: createEmailMaskElement,\n      })\n    );\n  },\n\n  renderChallengView: function() {\n    this.removeChildren();\n    this.add(\n      View.extend({\n        className: 'mfa-email-sent-content',\n        attributes: {\n          'data-se': 'mfa-email-sent-content',\n        },\n        // Why use `{{{` for the description?\n        // - factorEmail is actually an HTML fragment which\n        //   is created via another handlebar template and used for bold the email address.\n        template: hbs('{{{i18n code=\"email.mfa.email.sent.description\" bundle=\"login\" arguments=\"factorEmail\"}}}'),\n        getTemplateData: createEmailMaskElement,\n      })\n    );\n\n    this.add(ResendEmailView);\n\n    this.addInput({\n      label: loc('email.code.label', 'login'),\n      'label-top': true,\n      name: 'answer',\n      input: TextBox,\n      wide: true,\n      type: 'tel',\n    });\n    if (this.options.appState.get('allowRememberDevice')) {\n      this.addInput({\n        label: false,\n        'label-top': true,\n        placeholder: this.options.appState.get('rememberDeviceLabel'),\n        className: 'margin-btm-0',\n        name: 'rememberDevice',\n        type: 'checkbox',\n      });\n    }\n    this.render();\n  },\n});\n\nexport default SendEmailAndVerifyCodeFormVerifyEmailCodeForm;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Form, loc } from '@okta/courage';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default Form.extend({\n  className: 'mfa-verify-totp',\n  autoSave: true,\n  noCancelButton: true,\n  save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n  scrollOnError: false,\n  layout: 'o-form-theme',\n  attributes: { 'data-se': 'factor-totp' },\n\n  initialize: function() {\n    const factorName = this.model.get('factorLabel');\n    const maskPasswordField = this.model.get('provider') === 'RSA' || this.model.get('provider') === 'DEL_OATH';\n\n    this.title = factorName;\n    if (this.model.get('isFactorTypeVerification')) {\n      this.subtitle = loc('mfa.challenge.totp.subtitle.multiple', 'login', [factorName]);\n    } else {\n      this.subtitle = loc('mfa.challenge.title', 'login', [factorName]);\n    }\n\n    this.addInput({\n      label: loc('mfa.challenge.enterCode.placeholder', 'login'),\n      'label-top': true,\n      className: 'o-form-fieldset o-form-label-top auth-passcode',\n      name: 'answer',\n      input: TextBox,\n      type: maskPasswordField ? 'password' : 'tel',\n    });\n\n    if (this.options.appState.get('allowRememberDevice')) {\n      this.addInput({\n        label: false,\n        'label-top': true,\n        placeholder: this.options.appState.get('rememberDeviceLabel'),\n        className: 'margin-btm-0',\n        name: 'rememberDevice',\n        type: 'checkbox',\n      });\n    }\n\n    if (this.model.get('provider') === 'RSA' || this.model.get('provider') === 'DEL_OATH') {\n      this.listenTo(this.model, 'error', (source, error) => {\n        if (error && error.status === 409) {\n          // 409 means we are in change pin, so we should clear out answer input\n          this.$('.auth-passcode input').val('');\n          this.$('.auth-passcode input').trigger('change');\n          this.$('.auth-passcode input').focus();\n        }\n      });\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Form, loc } from '@okta/courage';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default Form.extend({\n  className: 'mfa-verify-yubikey',\n  autoSave: true,\n  noCancelButton: true,\n  save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n  scrollOnError: false,\n  layout: 'o-form-theme',\n  attributes: { 'data-se': 'factor-yubikey' },\n\n  initialize: function() {\n    const factorName = this.model.get('factorLabel');\n\n    this.title = factorName;\n    this.subtitle = loc('factor.totpHard.yubikey.description', 'login');\n\n    this.addInput({\n      label: loc('factor.totpHard.yubikey.placeholder', 'login'),\n      'label-top': true,\n      className: 'o-form-fieldset o-form-label-top auth-passcode',\n      name: 'answer',\n      input: TextBox,\n      inputId: 'mfa-answer',\n      type: 'password',\n    });\n\n    if (this.options.appState.get('allowRememberDevice')) {\n      this.addInput({\n        label: false,\n        'label-top': true,\n        className: 'margin-btm-0',\n        placeholder: this.options.appState.get('rememberDeviceLabel'),\n        name: 'rememberDevice',\n        type: 'checkbox',\n      });\n    }\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, View, loc, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nconst { Util } = internal.util;\nexport default View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link {{linkClassName}}\" data-se=\"signout-link\">\\\n        {{linkText}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer clearfix',\n  events: {\n    'click a[data-se=\"signout-link\"]': 'handleSignout',\n  },\n  handleSignout: function(e) {\n    e.preventDefault();\n\n    const appState = this.options.appState;\n    appState.trigger('signOut');\n    const isSMSPasswordRecovery = appState.get('isSMSPasswordRecovery');\n\n    this.model\n      .doTransaction(function(transaction) {\n        // `clearTransactionData` was added as a temporary fix for the issue reported in OKTA-487220\n        // OKTA-515889 was created to address the underlying issue on the `transaction.cancel` level\n        // and this temporary fix will be removed after that ticket is done\n        return transaction.cancel().then(clearTransactionData);\n      })\n      .then(() => {\n        if (this.settings.get('backToSignInUri') && !isSMSPasswordRecovery) {\n          Util.redirect(this.settings.get('backToSignInUri'));\n        } else {\n          this.state.set('navigateDir', Enums.DIRECTION_BACK);\n          appState.trigger('navigate', '');\n        }\n      });\n  },\n  getTemplateData: function() {\n    return {\n      linkClassName: _.isUndefined(this.options.linkClassName) ? 'goto' : this.options.linkClassName,\n      linkText: this.options.linkText || loc('goback', 'login'),\n    };\n  },\n});\n\n// TODO: remove after OKTA-515889 is done\nfunction clearTransactionData(transaction) {\n  return { ...transaction, data: null };\n}\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FooterSignout from './FooterSignout';\n\nexport default FooterSignout.extend({\n  template: hbs(\n    '\\\n      {{#if hasFactorPageCustomLink}}\\\n        <a href=\"{{factorPageCustomLinkHref}}\" data-se=\"factor-page-custom-link\" \\\n          class=\"link js-factor-page-custom-link\" \\\n          rel=\"noopener noreferrer\" target=\"_blank\">\\\n          {{factorPageCustomLinkText}}\\\n        </a>\\\n      {{/if}}\\\n      {{#if showLink}}\\\n        <a href=\"#\" class=\"link {{linkClassName}}\" data-se=\"signout-link\">\\\n          {{linkText}}\\\n        </a>\\\n      {{/if}}\\\n    '\n  ),\n  className: 'auth-footer clearfix',\n  getTemplateData: function() {\n    const signoutTemplateData = FooterSignout.prototype.getTemplateData.apply(this, arguments);\n    const factorPageCustomLinkHref = this.settings.get('helpLinks.factorPage.href');\n    const factorPageCustomLinkText = this.settings.get('helpLinks.factorPage.text');\n    const showLink = !this.settings.get('features.hideSignOutLinkInMFA') &&\n      !this.settings.get('features.mfaOnlyFlow');\n    return Object.assign({}, signoutTemplateData, {\n      hasFactorPageCustomLink: factorPageCustomLinkText && factorPageCustomLinkHref,\n      factorPageCustomLinkHref,\n      factorPageCustomLinkText,\n      showLink,\n    });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 21] max-statements: [2, 25] max-params: 0 */\nimport { loc, internal } from '@okta/courage';\nimport BaseLoginController from 'v1/util/BaseLoginController';\nimport EmailMagicLinkForm from 'v1/views/factor-verify/EmailMagicLinkForm';\nimport InlineTOTPForm from 'v1/views/mfa-verify/InlineTOTPForm';\nimport PassCodeForm from 'v1/views/mfa-verify/PassCodeForm';\nimport PasswordForm from 'v1/views/mfa-verify/PasswordForm';\nimport PushForm from 'v1/views/mfa-verify/PushForm';\nimport SecurityQuestionForm from 'v1/views/mfa-verify/SecurityQuestionForm';\nimport SendEmailAndVerifyCodeForm from 'v1/views/mfa-verify/SendEmailAndVerifyCodeForm';\nimport TOTPForm from 'v1/views/mfa-verify/TOTPForm';\nimport YubikeyForm from 'v1/views/mfa-verify/YubikeyForm';\nimport FooterMFA from 'v1/views/shared/FooterMFA';\nlet { CheckBox } = internal.views.forms.inputs;\nexport default BaseLoginController.extend({\n  className: 'mfa-verify',\n\n  initialize: function(options) {\n    const factorType = options.factorType;\n    let View;\n\n    switch (factorType) {\n    case 'question':\n      View = SecurityQuestionForm;\n      break;\n    case 'email':\n      if (this.options.appState.get('isIdxStateToken')) {\n        View = EmailMagicLinkForm;\n      } else {\n        View = SendEmailAndVerifyCodeForm;\n      }\n      break;\n    case 'sms':\n    case 'call':\n      View = PassCodeForm;\n      break;\n    case 'token':\n    case 'token:software:totp':\n    case 'token:hotp':\n      View = TOTPForm;\n      break;\n    case 'token:hardware':\n      View = YubikeyForm;\n      break;\n    case 'push':\n      View = PushForm;\n      break;\n    case 'password':\n      View = PasswordForm;\n      break;\n    default:\n      throw new Error('Unrecognized factor type');\n    }\n\n    this.model = this.findModel(factorType, options);\n    if (!this.model) {\n      // TODO: recover from this more gracefully - probably to redirect\n      // to default factor\n      throw new Error('Unrecognized factor/provider');\n    }\n\n    this.addListeners();\n    this.add(new View(this.toJSON()));\n\n    // If Okta Verify Push and Okta Verify totp are both enabled,\n    // then we show Push first, and totp is the \"backup\" factor,\n    // which is rendered in an additional InlineTOTPForm\n    if (factorType === 'push' && this.model.get('isOktaFactor')) {\n      if (this.model.get('backupFactor')) {\n        this.inlineTotpForm = this.add(InlineTOTPForm, {\n          options: { model: this.model.get('backupFactor') },\n        }).last();\n      }\n\n      if (this.settings.get('features.autoPush')) {\n        this.autoPushCheckBox = this.add(CheckBox, {\n          options: {\n            model: this.model,\n            name: 'autoPush',\n            placeholder: loc('autoPush', 'login'),\n            label: false,\n            'label-top': false,\n            className: 'margin-btm-0',\n          },\n        }).last();\n      }\n\n      // Remember Device checkbox resides outside of the Push and TOTP forms.\n      if (this.options.appState.get('allowRememberDevice')) {\n        this.rememberDeviceCheckbox = this.add(CheckBox, {\n          options: {\n            model: this.model,\n            name: 'rememberDevice',\n            placeholder: this.options.appState.get('rememberDeviceLabel'),\n            label: false,\n            'label-top': true,\n            className: 'margin-btm-0',\n          },\n        }).last();\n      }\n      // Set rememberDevice on the backup factor (totp) if available\n      if (this.model.get('backupFactor')) {\n        this.listenTo(this.model, 'change:rememberDevice', function(model, rememberDevice) {\n          model.get('backupFactor').set('rememberDevice', rememberDevice);\n        });\n      }\n    }\n\n    this.listenTo(this.options.appState, 'change:isWaitingForNumberChallenge', function(\n      state,\n      isWaitingForNumberChallenge\n    ) {\n      if (isWaitingForNumberChallenge || this.options.appState.get('lastAuthResponse').status === 'SUCCESS') {\n        this.autoPushCheckBox && this.autoPushCheckBox.$el.hide();\n        this.rememberDeviceCheckbox && this.rememberDeviceCheckbox.$el.hide();\n        this.inlineTotpForm && this.inlineTotpForm.$el.hide();\n      } else {\n        this.autoPushCheckBox && this.autoPushCheckBox.$el.show();\n        this.rememberDeviceCheckbox && this.rememberDeviceCheckbox.$el.show();\n        this.inlineTotpForm && this.inlineTotpForm.$el.show();\n      }\n    });\n\n    this.add(new FooterMFA(this.toJSON()));\n  },\n\n  findModel: function(factorType, options) {\n    const factors = options.appState.get('factors');\n    const provider = options.provider;\n    const factorIndex = options.factorIndex;\n\n    if (!provider) {\n      return factors.findWhere({ factorType: factorType, isFactorTypeVerification: true });\n    } else if (factors.hasMultipleFactorsOfSameType(factorType) && factorIndex) {\n      return factors.getFactorByTypeAndIndex(factorType, factorIndex);\n    } else {\n      return factors.findWhere({ provider: provider, factorType: factorType });\n    }\n  },\n\n  trapAuthResponse: function() {\n    if (\n      (this.options.appState.get('isMfaRequired') && this.options.appState.get('trapMfaRequiredResponse')) ||\n      this.options.appState.get('isMfaChallenge')\n    ) {\n      this.options.appState.set('trapMfaRequiredResponse', false);\n      return true;\n    }\n    return false;\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FactorUtil from 'util/FactorUtil';\nexport default View.extend({\n  template: hbs`{{#if requirements}}\n      <div class=\"password-requirements--header\">\n        {{i18n code=\"password.complexity.requirements.header\" bundle=\"login\"}}\n      </div>\n      <ul class=\"password-requirements--list\">\n          {{#each requirements}}<li class=\"password-requirements--list-item\">{{this}}</li>{{/each}}\n      </ul>\n    {{/if}}`,\n\n  attributes: {\n    'data-se': 'password-requirements-html',\n  },\n\n  allRequirements: [],\n\n  initialize: function(options) {\n    const policy = options.policy;\n\n    if (!policy) {\n      return;\n    }\n\n    this.allRequirements = FactorUtil.getPasswordComplexityDescriptionForHtmlList(policy);\n  },\n\n  getTemplateData: function() {\n    return {\n      requirements: this.allRequirements,\n    };\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport ValidationUtil from 'v1/util/ValidationUtil';\nimport Footer from 'v1/views/expired-password/Footer';\nimport PasswordRequirements from 'v1/views/shared/PasswordRequirements';\nimport TextBox from 'v1/views/shared/TextBox';\n\nexport default FormController.extend({\n  className: 'password-expired',\n  Model: {\n    props: {\n      oldPassword: ['string', true],\n      newPassword: ['string', true],\n      confirmPassword: ['string', true],\n    },\n    validate: function() {\n      return ValidationUtil.validatePasswordMatch(this);\n    },\n    save: function() {\n      this.trigger('save');\n      return this.doTransaction(function(transaction) {\n        return transaction.changePassword({\n          oldPassword: this.get('oldPassword'),\n          newPassword: this.get('newPassword'),\n        });\n      });\n    },\n  },\n  Form: {\n    save: _.partial(loc, 'password.expired.submit', 'login'),\n    title: function() {\n      const expiringSoon = this.options.appState.get('isPwdExpiringSoon');\n      const numDays = this.options.appState.get('passwordExpireDays');\n\n      if (expiringSoon && numDays > 0) {\n        return loc('password.expiring.title', 'login', [numDays]);\n      } else if (expiringSoon && numDays === 0) {\n        return loc('password.expiring.today', 'login');\n      } else if (expiringSoon) {\n        return loc('password.expiring.soon', 'login');\n      } else {\n        return this.settings.get('brandName')\n          ? loc('password.expired.title.specific', 'login', [this.settings.get('brandName')])\n          : loc('password.expired.title.generic', 'login');\n      }\n    },\n    subtitle: function() {\n      if (this.options.appState.get('isPwdExpiringSoon')) {\n        return this.settings.get('brandName')\n          ? loc('password.expiring.subtitle.specific', 'login', [this.settings.get('brandName')])\n          : loc('password.expiring.subtitle.generic', 'login');\n      }\n\n      const policy = this.options.appState.get('policy');\n\n      if (!policy || this.settings.get('features.showPasswordRequirementsAsHtmlList')) {\n        return;\n      }\n\n      return FactorUtil.getPasswordComplexityDescription(policy);\n    },\n    parseErrorMessage: function(responseJSON) {\n      const policy = this.options.appState.get('policy');\n\n      if (!!policy && this.settings.get('features.showPasswordRequirementsAsHtmlList')) {\n        /*\n          - This is a specific case where don't want to repeat the requirements again in the error message, since this\n            is already shown in the description. The description as bullet-points itself should give an indication\n            of the requirements.\n          - We cannot check for error code this in this case, as the error code is shared between\n            requirements not met message, common password message, etc. So error summary is the only differentiating\n            factor. Replace the password requirements string with empty string in this case.\n        */\n        responseJSON = FactorUtil.removeRequirementsFromError(responseJSON, policy);\n      }\n      return responseJSON;\n    },\n    formChildren: function() {\n      let children = [];\n\n      if (this.settings.get('features.showPasswordRequirementsAsHtmlList')) {\n        children.push(\n          FormType.View({\n            View: new PasswordRequirements({ policy: this.options.appState.get('policy') }),\n          })\n        );\n      }\n\n      children = children.concat([\n        FormType.Input({\n          'label-top': true,\n          label: loc('password.oldPassword.placeholder', 'login'),\n          explain: Util.createInputExplain('password.oldPassword.tooltip', 'password.oldPassword.placeholder', 'login'),\n          'explain-top': true,\n          name: 'oldPassword',\n          input: TextBox,\n          type: 'password',\n        }),\n        FormType.Divider(),\n        FormType.Input({\n          className: 'margin-btm-5',\n          'label-top': true,\n          label: loc('password.newPassword.placeholder', 'login'),\n          explain: Util.createInputExplain('password.newPassword.tooltip', 'password.newPassword.placeholder', 'login'),\n          'explain-top': true,\n          name: 'newPassword',\n          input: TextBox,\n          type: 'password',\n        }),\n        FormType.Input({\n          'label-top': true,\n          label: loc('password.confirmPassword.placeholder', 'login'),\n          explain: Util.createInputExplain(\n            'password.confirmPassword.tooltip',\n            'password.confirmPassword.placeholder',\n            'login'\n          ),\n          'explain-top': true,\n          name: 'confirmPassword',\n          input: TextBox,\n          type: 'password',\n        }),\n      ]);\n\n      return children;\n    },\n  },\n  Footer: Footer,\n\n  initialize: function() {\n    this.listenTo(this.form, 'save', function() {\n      const creds = {\n        username: this.options.appState.get('userEmail'),\n        password: this.model.get('newPassword'),\n      };\n\n      this.settings.processCreds(creds).then(_.bind(this.model.save, this.model));\n    });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, internal } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport ValidationUtil from 'v1/util/ValidationUtil';\nimport FooterSignout from 'v1/views/shared/FooterSignout';\nimport PasswordRequirements from 'v1/views/shared/PasswordRequirements';\nimport TextBox from 'v1/views/shared/TextBox';\nlet { CheckBox } = internal.views.forms.inputs;\n\nexport default FormController.extend({\n  className: 'password-reset',\n  Model: {\n    props: {\n      newPassword: ['string', true],\n      confirmPassword: ['string', true],\n      revokeSessions: ['boolean', false]\n    },\n    validate: function() {\n      return ValidationUtil.validatePasswordMatch(this);\n    },\n    save: function() {\n      this.trigger('save');\n      const self = this;\n\n      return this.doTransaction(function(transaction) {\n        const payload = { newPassword: self.get('newPassword') };\n        if (self.settings.get('features.showSessionRevocation')) {\n          payload.revokeSessions = self.get('revokeSessions');\n        }\n\n        return transaction.resetPassword(payload);\n      });\n    },\n  },\n  Form: {\n    save: _.partial(loc, 'password.reset', 'login'),\n    title: function() {\n      return this.settings.get('brandName')\n        ? loc('password.reset.title.specific', 'login', [this.settings.get('brandName')])\n        : loc('password.reset.title.generic', 'login');\n    },\n    subtitle: function() {\n      const policy = this.options.appState.get('policy');\n\n      if (!policy || this.settings.get('features.showPasswordRequirementsAsHtmlList')) {\n        return;\n      }\n\n      return FactorUtil.getPasswordComplexityDescription(policy);\n    },\n    parseErrorMessage: function(responseJSON) {\n      const policy = this.options.appState.get('policy');\n\n      if (!!policy && this.settings.get('features.showPasswordRequirementsAsHtmlList')) {\n        /*\n          - This is a specific case where don't want to repeat the requirements again in the error message, since this\n            is already shown in the description. The description as bullet-points itself should give an indication\n            of the requirements.\n          - We cannot check for error code this in this case, as the error code is shared between\n            requirements not met message, common password message, etc. So error summary is the only differentiating\n            factor. Replace the password requirements string with empty string in this case.\n        */\n        responseJSON = FactorUtil.removeRequirementsFromError(responseJSON, policy);\n      }\n      return responseJSON;\n    },\n    formChildren: function() {\n      let children = [];\n\n      if (this.settings.get('features.showPasswordRequirementsAsHtmlList')) {\n        children.push(\n          FormType.View({\n            View: new PasswordRequirements({ policy: this.options.appState.get('policy') }),\n          })\n        );\n      }\n\n      children = children.concat([\n        FormType.Input({\n          className: 'margin-btm-5',\n          label: loc('password.newPassword.placeholder', 'login'),\n          'label-top': true,\n          explain: Util.createInputExplain('password.newPassword.tooltip', 'password.newPassword.placeholder', 'login'),\n          'explain-top': true,\n          name: 'newPassword',\n          input: TextBox,\n          type: 'password',\n          autoComplete: Util.getAutocompleteValue(this.settings, 'new-password'),\n        }),\n        FormType.Input({\n          label: loc('password.confirmPassword.placeholder', 'login'),\n          'label-top': true,\n          explain: Util.createInputExplain(\n            'password.confirmPassword.tooltip',\n            'password.confirmPassword.placeholder',\n            'login'\n          ),\n          'explain-top': true,\n          name: 'confirmPassword',\n          input: TextBox,\n          type: 'password',\n          autoComplete: Util.getAutocompleteValue(this.settings, 'new-password'),\n        }),\n      ]);\n\n      if (this.settings.get('features.showSessionRevocation')) {\n        children = children.concat([\n          FormType.Input({\n            placeholder: loc('password.reset.revokeSessions', 'login'),\n            name: 'revokeSessions',\n            input: CheckBox,\n            type: 'checkbox',\n          })\n        ]);\n      }\n\n      return children;\n    },\n  },\n\n  initialize: function() {\n    this.listenTo(this.form, 'save', function() {\n      const creds = {\n        username: this.options.appState.get('userEmail'),\n        password: this.model.get('newPassword'),\n      };\n\n      this.settings.processCreds(creds).then(_.bind(this.model.save, this.model));\n    });\n\n    if (!this.settings.get('features.hideBackToSignInForReset')) {\n      this.addFooter(FooterSignout);\n    }\n  },\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nexport default FormController.extend({\n  className: 'poll',\n  Model: {\n    save: function() {\n      this.trigger('cancelRequest');\n      return this.appState\n        .get('transaction')\n        .cancel()\n        .then(() => {\n          this.options.appState.trigger('navigate', '');\n        })\n        .catch(() => {\n          this._stopCountDown();\n        });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    hasSavingState: false,\n    title: function() {\n      return this.title;\n    },\n    className: 'poll-controller',\n    noCancelButton: true,\n    save: loc('oform.cancel', 'login'),\n    modelEvents: {\n      cancelRequest: '_stopCountDown',\n    },\n    formChildren: [\n      FormType.View({\n        View: '<div >\\\n               <div data-se=\"poll-waiting\" class=\"hide okta-waiting-spinner\"></div>\\\n             </div>',\n      }),\n    ],\n    _checkStatus: function() {\n      // start polling request\n      this.transactionObject\n        .poll()\n        .then(resp => {\n          if (resp.data && resp.status !== 'POLL') {\n            this.options.appState.set('transaction', resp);\n            return;\n          }\n          this.$('.okta-waiting-spinner').hide();\n          let factorPollingIntervalSeconds = Math.ceil(resp.transaction.profile.refresh / 1000);\n          this._startCountDown(factorPollingIntervalSeconds);\n        })\n        .catch(() => {\n          this._stopCountDown();\n        });\n    },\n\n    _startCountDown: function(factorPollingIntervalSeconds) {\n      // start one second countdown for next poll request\n      this.countDown = setInterval(() => {\n        // update title after every second and check if countdown == 1 to poll again\n        this._updateTitle(factorPollingIntervalSeconds);\n        if (factorPollingIntervalSeconds === 0) {\n          /* when countdown hits 0\n                       - stop current poll\n                       - show spinner\n                       - check status\n                      */\n          this._stopCountDown();\n          this.$('.okta-waiting-spinner').show();\n          // start after a small delay so that the spinner does not get hidden too soon\n          this.checkStatusTimeout = setTimeout(() => {\n            this._checkStatus();\n          }, 200);\n        } else {\n          // reduce countdown after every second\n          factorPollingIntervalSeconds = factorPollingIntervalSeconds - 1;\n        }\n      }, 1000);\n    },\n\n    _updateTitle: function(factorPollingIntervalSeconds) {\n      this.title = loc('polling.title', 'login', [factorPollingIntervalSeconds]);\n      this.$el.find('.okta-form-title').text(this.title);\n    },\n\n    _stopCountDown: function() {\n      // clear countdown setInterval\n      if (this.countDown) {\n        clearInterval(this.countDown);\n      }\n      // clear checkstatus setTimeout\n      if (this.checkStatusTimeout) {\n        clearInterval(this.checkStatusTimeout);\n      }\n    },\n\n    initialize: function(options) {\n      this.transactionObject = options.appState.get('transaction');\n      this.factorPollingIntervalSeconds = Math.ceil(this.transactionObject.transaction.profile.refresh / 1000);\n      this._updateTitle(this.factorPollingIntervalSeconds);\n      this._startCountDown(this.factorPollingIntervalSeconds);\n    },\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n\n  remove: function() {\n    this.form._stopCountDown();\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nexport default FormController.extend({\n  className: 'password-reset-email-sent',\n  Model: function() {\n    return {\n      local: {\n        userFullName: ['string', false, this.options.appState.get('userFullName')],\n      },\n    };\n  },\n\n  Form: {\n    title: _.partial(loc, 'password.forgot.emailSent.title', 'login'),\n    subtitle: function() {\n      const username = this.options.appState.get('username');\n\n      return loc('password.forgot.emailSent.desc', 'login', [username]);\n    },\n    noButtonBar: true,\n    attributes: { 'data-se': 'pwd-reset-email-sent' },\n    formChildren: function() {\n      let children = [\n        FormType.View({\n          View: View.extend({\n            template: hbs(\n              '\\\n              <span class=\"accessibility-text\" role=\"status\">{{alert}}</span>\\\n              '\n            ),\n            getTemplateData: function() {\n              return { alert: loc('password.forgot.emailSent.title', 'login') };\n            },\n          }),\n        }),\n      ];\n\n      if (!this.settings.get('features.hideBackToSignInForReset')) {\n        children.push(\n          FormType.Button({\n            title: loc('goback', 'login'),\n            className: 'button button-primary button-wide',\n            attributes: { 'data-se': 'back-button' },\n            click: function() {\n              const self = this;\n\n              return this.model\n                .doTransaction(function(transaction) {\n                  return transaction.cancel();\n                })\n                .then(function() {\n                  self.state.set('navigateDir', Enums.DIRECTION_BACK);\n                  self.options.appState.trigger('navigate', '');\n                });\n            },\n          })\n        );\n      }\n\n      return children;\n    },\n  },\n\n  initialize: function(options) {\n    this.settings.callGlobalSuccess(Enums.FORGOT_PASSWORD_EMAIL_SENT, {\n      username: options.appState.get('username'),\n    });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport FooterSignout from 'v1/views/shared/FooterSignout';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default FormController.extend({\n  className: 'recovery-challenge',\n  Model: {\n    props: {\n      passCode: ['string', true],\n    },\n    local: {\n      ableToResend: 'boolean',\n    },\n    resendCode: function() {\n      // Note: This does not require a trapAuthResponse because Backbone's\n      // router will not navigate if the url path is the same\n      this.limitResending();\n      return this.doTransaction(function(transaction) {\n        return transaction.resend();\n      });\n    },\n    limitResending: function() {\n      this.set({ ableToResend: false });\n      _.delay(_.bind(this.set, this), Enums.API_RATE_LIMIT, { ableToResend: true });\n    },\n    save: function() {\n      return this.doTransaction(function(transaction) {\n        return transaction.verify({\n          passCode: this.get('passCode'),\n        });\n      });\n    },\n  },\n  Form: {\n    autoSave: true,\n    save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n    title: function() {\n      if (this.options.appState.get('factorType') === Enums.RECOVERY_FACTOR_TYPE_CALL) {\n        return loc('recoveryChallenge.call.title', 'login');\n      } else {\n        return loc('recoveryChallenge.sms.title', 'login');\n      }\n    },\n    className: 'recovery-challenge',\n    initialize: function() {\n      this.listenTo(this.model, 'error', function() {\n        this.clearErrors();\n      });\n    },\n    formChildren: function() {\n      return [\n        FormType.Button({\n          title: loc('mfa.resendCode', 'login'),\n          attributes: { 'data-se': 'resend-button' },\n          className: 'button sms-request-button margin-top-30',\n          click: function() {\n            this.model.resendCode();\n          },\n          initialize: function() {\n            this.listenTo(this.model, 'change:ableToResend', function(model, ableToResend) {\n              if (ableToResend) {\n                this.options.title = loc('mfa.resendCode', 'login');\n                this.enable();\n                this.render();\n              } else {\n                this.options.title = loc('mfa.sent', 'login');\n                this.disable();\n                this.render();\n              }\n            });\n          },\n        }),\n        FormType.Input({\n          label: loc('mfa.challenge.enterCode.placeholder', 'login'),\n          'label-top': true,\n          className: 'enroll-sms-phone',\n          name: 'passCode',\n          input: TextBox,\n          type: 'text',\n        }),\n      ];\n    },\n  },\n\n  events: {\n    'click .send-email-link': function(e) {\n      e.preventDefault();\n      const settings = this.model.settings;\n      const username = this.options.appState.get('username');\n      const recoveryType = this.options.appState.get('recoveryType');\n\n      this.model.startTransaction(function(authClient) {\n        // The user could have landed here via the Forgot Password/Unlock Account flow\n        switch (recoveryType) {\n        case Enums.RECOVERY_TYPE_PASSWORD:\n          return authClient.forgotPassword({\n            username: settings.transformUsername(username, Enums.FORGOT_PASSWORD),\n            factorType: Enums.RECOVERY_FACTOR_TYPE_EMAIL,\n          });\n        case Enums.RECOVERY_TYPE_UNLOCK:\n          return authClient.unlockAccount({\n            username: settings.transformUsername(username, Enums.UNLOCK_ACCOUNT),\n            factorType: Enums.RECOVERY_FACTOR_TYPE_EMAIL,\n          });\n        default:\n          return;\n        }\n      })\n        .catch(() => {});\n    },\n  },\n\n  initialize: function() {\n    const recoveryType = this.options.appState.get('recoveryType');\n    let sendEmailLink;\n\n    switch (recoveryType) {\n    case Enums.RECOVERY_TYPE_PASSWORD:\n      sendEmailLink = hbs`{{i18n code=\"password.forgot.code.notReceived\" bundle=\"login\"}}`;\n      break;\n    case Enums.RECOVERY_TYPE_UNLOCK:\n      sendEmailLink = hbs`{{i18n code=\"account.unlock.code.notReceived\" bundle=\"login\"}}`;\n      break;\n    default:\n      break;\n    }\n\n    if (sendEmailLink && this.settings.get('features.emailRecovery')) {\n      this.add(\n        View.extend({\n          className: 'link send-email-link',\n          tagName: 'a',\n          attributes: {\n            href: '#',\n            'data-se': 'send-email-link',\n          },\n          template: sendEmailLink,\n        })\n      );\n    }\n\n    if (!this.settings.get('features.hideBackToSignInForReset')) {\n      this.addFooter(FooterSignout);\n    }\n  },\n\n  postRender: function() {\n    this.model.limitResending();\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport FormController from 'v1/util/FormController';\nexport default FormController.extend({\n  className: 'recovery-loading',\n\n  Model: {},\n  Form: {\n    noButtonBar: true,\n  },\n\n  initialize: function(options) {\n    const self = this;\n\n    return this.model\n      .startTransaction(function(authClient) {\n        return authClient.verifyRecoveryToken({\n          recoveryToken: options.token,\n        });\n      })\n      .catch(function() {\n        self.options.appState.trigger('loading', false);\n        self.options.appState.trigger('removeLoading');\n      });\n  },\n\n  preRender: function() {\n    this.options.appState.trigger('loading', true);\n  },\n\n  trapAuthResponse: function() {\n    this.options.appState.trigger('loading', false);\n    return false;\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport FooterSignout from 'v1/views/shared/FooterSignout';\nimport TextBox from 'v1/views/shared/TextBox';\nexport default FormController.extend({\n  className: 'recovery-question',\n  Model: {\n    props: {\n      answer: ['string', true],\n      showAnswer: 'boolean',\n    },\n    save: function() {\n      return this.doTransaction(function(transaction) {\n        return transaction.answer({ answer: this.get('answer') });\n      });\n    },\n  },\n  Form: {\n    autoSave: true,\n    save: function() {\n      switch (this.options.appState.get('recoveryType')) {\n      case 'PASSWORD':\n        return loc('password.forgot.question.submit', 'login');\n      case 'UNLOCK':\n        return loc('account.unlock.question.submit', 'login');\n      default:\n        return loc('mfa.challenge.verify', 'login');\n      }\n    },\n    title: function() {\n      switch (this.options.appState.get('recoveryType')) {\n      case 'PASSWORD':\n        return loc('password.forgot.question.title', 'login');\n      case 'UNLOCK':\n        return loc('account.unlock.question.title', 'login');\n      default:\n        return '';\n      }\n    },\n    formChildren: function() {\n      return [\n        FormType.Input({\n          label: this.options.appState.get('recoveryQuestion'),\n          placeholder: loc('mfa.challenge.answer.placeholder', 'login'),\n          name: 'answer',\n          input: TextBox,\n          type: 'password',\n          initialize: function() {\n            this.listenTo(this.model, 'change:showAnswer', function() {\n              const type = this.model.get('showAnswer') ? 'text' : 'password';\n\n              this.getInputs()[0].changeType(type);\n            });\n          },\n        }),\n        FormType.Input({\n          label: false,\n          'label-top': true,\n          placeholder: loc('mfa.challenge.answer.showAnswer', 'login'),\n          className: 'recovery-question-show margin-btm-0',\n          name: 'showAnswer',\n          type: 'checkbox',\n        }),\n      ];\n    },\n  },\n  initialize: function() {\n    if (!this.settings.get('features.hideBackToSignInForReset')) {\n      this.addFooter(FooterSignout);\n    }\n  },\n});\n","/* eslint-disable max-depth */\n/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport FormController from 'v1/util/FormController';\nexport default FormController.extend({\n  className: 'refresh-auth-state',\n\n  Model: {},\n\n  Form: {\n    noButtonBar: true,\n  },\n\n  preRender: function() {\n    const appState = this.options.appState;\n    const token = this.options.token;\n\n    this.model.startTransaction(function(authClient) {\n      appState.trigger('loading', true);\n      if (token) {\n        return authClient.tx.introspect({\n          stateToken: token,\n        });\n      }\n\n      // get stateToken from cookie\n      // currently only applies to old pipeline\n      if (authClient.tx.exists()) {\n        return authClient.tx.resume();\n      }\n\n      appState.trigger('navigate', '');\n    });\n  },\n\n  remove: function() {\n    this.options.appState.trigger('loading', false);\n    return FormController.prototype.remove.apply(this, arguments);\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nexport default FormController.extend({\n  events: {\n    'click .back-btn': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n  },\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    this.options.appState.trigger('navigate', '');\n  },\n  className: 'registration-complete',\n  Model: function() {},\n  initialize: function() {\n    this.settings.callGlobalSuccess(Enums.ACTIVATION_EMAIL_SENT, {\n      username: this.options.appState.get('username'),\n    });\n  },\n  Form: {\n    noButtonBar: true,\n    formChildren: function() {\n      return [\n        FormType.View({\n          View: View.extend({\n            template: hbs(\n              '\\\n              <div class=\"container\">\\\n              <span class=\"title-icon icon icon-16 confirm-16-green\"></span>\\\n              <h2 class=\"title\">{{title}}</h2>\\\n              <div class=\"desc\">{{desc}}</div>\\\n              </div>\\\n              <a href=\"#\" class=\"back-btn\" data-se=\"back-link\">\\\n                {{i18n code=\"goback\" bundle=\"login\"}}\\\n              </a>\\\n              '\n            ),\n            getTemplateData: function() {\n              return {\n                desc: loc('registration.complete.confirm.text', 'login'),\n                title: loc('registration.complete.title', 'login'),\n              };\n            },\n          }),\n        }),\n      ];\n    },\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { Model } from '@okta/courage';\nimport BaseLoginModel from './BaseLoginModel';\nexport default BaseLoginModel.extend({\n  constructor: function(options) {\n    this.settings = options && options.settings;\n    Model.apply(this, arguments);\n  },\n  loginWithActivationToken: function(activationToken) {\n    return this.startTransaction(function(authClient) {\n      return authClient.signInWithCredentials({ token: activationToken });\n    });\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, BaseModel, internal } from '@okta/courage';\nlet { BaseSchema, SchemaProperty } = internal.models;\nconst RegistrationSchemaRegistrationSchemaPropertyCollection = SchemaProperty.Collection.extend({\n  createModelProperties: function() {\n    const modelProperties = SchemaProperty.Collection.prototype.createModelProperties.apply(this);\n\n    _.each(\n      modelProperties,\n      function(modelProperty, name) {\n        modelProperty.required = !!this.get(name).get('required');\n      },\n      this\n    );\n    return modelProperties;\n  },\n});\nexport default BaseSchema.Model.extend({\n  expand: ['schema'],\n\n  constructor: function() {\n    this.properties = new RegistrationSchemaRegistrationSchemaPropertyCollection();\n    BaseModel.apply(this, arguments);\n  },\n\n  parse: function(resp) {\n    const parseResponseData = resp => {\n      const requireFields = resp.schema.required;\n\n      if (_.isArray(requireFields)) {\n        _.each(\n          requireFields,\n          function(requireField) {\n            const field = this.properties.get(requireField);\n\n            if (field) {\n              field.set('required', true);\n            }\n          },\n          this\n        );\n      }\n\n      const fieldOrderIds = resp.schema.fieldOrder;\n\n      if (_.isArray(fieldOrderIds)) {\n        _.each(\n          fieldOrderIds,\n          function(fieldOrderId, sortOrder) {\n            const field = this.properties.get(fieldOrderId);\n\n            if (field) {\n              field.set('sortOrder', sortOrder);\n            }\n          },\n          this\n        );\n        this.properties.comparator = 'sortOrder';\n        this.properties.sort();\n      }\n      this.properties.defaultPolicyId = resp.policyId;\n      return resp;\n    };\n\n    const self = this;\n    this.settings.parseRegistrationSchema(\n      resp,\n      function(resp) {\n        if (resp.profileSchema) {\n          resp.schema = resp.profileSchema;\n          BaseSchema.Model.prototype.parse.apply(self, [resp]);\n          resp = parseResponseData(resp);\n        }\n        self.trigger('parseComplete', { properties: self.properties });\n      },\n      function(error) {\n        self.trigger('parseComplete', { properties: self.properties, error: error });\n      }\n    );\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nconst SubSchemaSubSchema = View.extend({\n  index: '',\n  message: '',\n  class: function() {\n    return;\n  },\n  className: function() {\n    return 'subschema-unsatisfied subschema-' + this.index;\n  },\n  template: hbs(\n    '\\\n      <p class=\"default-schema\">\\\n        <span class=\"icon icon-16\"></span>\\\n        {{message}}\\\n      </p>\\\n    '\n  ),\n  getTemplateData: function() {\n    return {\n      message: this.message,\n    };\n  },\n});\nexport default View.extend({\n  className: 'subschema',\n\n  children: function() {\n    return this.subSchemas.map(function(subSchema, index) {\n      const description = subSchema.get('description');\n      const message = description;\n      // TODO API should send translated strings instead of i18n code inside description\n      // or send param with i18n code\n\n      return SubSchemaSubSchema.extend({\n        index: index,\n        message: message,\n      });\n    });\n  },\n});\n","/*!\n * Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { _, Backbone, Model, loc, Form, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport LoginModel from 'v1/models/LoginModel';\nimport RegistrationSchema from 'v1/models/RegistrationSchema';\nimport Q from 'q';\nimport BaseLoginController from 'v1/util/BaseLoginController';\nimport Enums from 'util/Enums';\nimport { RegistrationError } from 'util/Errors';\nimport RegistrationFormFactory from 'v1/util/RegistrationFormFactory';\nimport Util from 'util/Util';\nimport SubSchema from 'v1/views/registration/SubSchema';\nconst RegistrationControllerFooter = View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help\" data-se=\"back-link\">\\\n        {{i18n code=\"goback\" bundle=\"login\"}}\\\n      </a>\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .help': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n  },\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    this.options.appState.trigger('navigate', '');\n  },\n});\nexport default BaseLoginController.extend({\n  className: 'registration',\n  initialize: function() {\n    const RegistrationControllerSchema = RegistrationSchema.extend({\n      settings: this.options.settings,\n      url: this.options.settings.get('baseUrl') + '/api/v1/registration/form',\n    });\n    // setup schema\n\n    const schema = new RegistrationControllerSchema();\n\n    this.state.set('schema', schema);\n  },\n  getRegistrationApiUrl: function() {\n    const defaultPolicyId = this.settings.get('defaultPolicyId');\n    // default policyId\n\n    const orgPolicyId = this.options.settings.get('policyId');\n    // org policyId\n\n    const apiUrl = defaultPolicyId\n      ? this.getRegistrationPolicyApi(defaultPolicyId)\n      : this.getRegistrationPolicyApi(orgPolicyId);\n\n    return apiUrl;\n  },\n  getRegistrationPolicyApi: function(policyId) {\n    return this.options.settings.get('baseUrl') + '/api/v1/registration/' + policyId;\n  },\n  doPostSubmit: function() {\n    if (this.model.get('activationToken')) {\n      const self = this;\n      // register via activation token\n\n      self.settings.callGlobalSuccess(Enums.REGISTRATION_COMPLETE, {\n        activationToken: this.model.get('activationToken'),\n      });\n\n      const loginModel = new LoginModel({\n        settings: self.model.appState.settings,\n      });\n\n      loginModel.loginWithActivationToken(this.model.get('activationToken')).then(function(transaction) {\n        self.model.trigger('setTransaction', transaction);\n      });\n    } else {\n      // register via activation email\n      this.model.appState.set('username', this.model.get('email'));\n      this.model.appState.trigger('navigate', 'signin/register-complete');\n    }\n  },\n  registerUser: function(postData) {\n    const self = this;\n\n    Object.keys(postData).forEach((k) =>\n      (_.isNull(postData[k]) || _.isUndefined(postData[k]) || postData[k] === '') && delete postData[k]);\n    this.model.attributes = postData;\n    // Model.save returns a jqXHR\n    Backbone.Model.prototype.save\n      .call(this.model)\n      .then(function() {\n        self.model.trigger('startSaving');\n        const activationToken = self.model.get('activationToken');\n        const postSubmitData = activationToken ? activationToken : self.model.get('email');\n\n        self.settings.postRegistrationSubmit(\n          postSubmitData,\n          function() {\n            self.doPostSubmit();\n          },\n          function(errors) {\n            self.showErrors(errors);\n          }\n        );\n      })\n      .fail((err) => {\n        const responseJSON = err.responseJSON;\n\n        if (responseJSON && responseJSON.errorCauses.length) {\n          const { errorCode, errorCauses } = responseJSON;\n          const { errorSummary, reason, location } = errorCauses[0];\n\n          const isNotUniqueValue =\n            errorCode === 'E0000001' &&\n            reason === 'UNIQUE_CONSTRAINT';\n\n          if (isNotUniqueValue) {\n            this.renderIsNotUniqueError(responseJSON);\n          }\n\n          this.renderLegacyLocationErrorIfNeeded(location, errorSummary);\n\n          Util.triggerAfterError(\n            this,\n            new RegistrationError(errorSummary)\n          );\n        }\n      });\n  },\n\n  renderIsNotUniqueError: function(error) {\n    const { location } = error.errorCauses[0];\n    const errorSummary = loc(\n      'registration.error.userName.notUniqueWithinOrg',\n      'login',\n      [location]\n    );\n    // replace generic error message with more specific one\n    // without using backbone events because there was a race condition\n    // between clearing and triggering errors\n    this.$el.find('.okta-form-infobox-error p').text(errorSummary);\n  },\n\n  renderLegacyLocationErrorIfNeeded: function(location, errorSummary) {\n    // replace generic error message with errorSummary for v1 SIW\n    // this makes sure that with legacy location that starts with `data.userProfile`\n    // we still see the errorSummary in the error banner instead of only a generic error\n    // See example in https://developer.okta.com/docs/reference/registration-hook/#sample-json-payload-of-request\n    if (location && /^data\\.userProfile.*/.test(location)) {\n      this.$el.find('.okta-form-infobox-error p').text(errorSummary);\n    }\n  },\n\n  createRegistrationModel: function(modelProperties) {\n    const self = this;\n    const RegistrationControllerModel = Model.extend({\n      url: self.getRegistrationApiUrl() + '/register',\n      settings: this.settings,\n      appState: this.options.appState,\n      props: modelProperties,\n      local: {\n        activationToken: 'string',\n      },\n      toJSON: function() {\n        const data = Model.prototype.toJSON.apply(this, arguments);\n\n        return {\n          userProfile: data,\n          relayState: this.settings.get('relayState'),\n        };\n      },\n      parse: function(resp) {\n        this.set('activationToken', resp.activationToken);\n        delete resp.activationToken;\n        return resp;\n      },\n      save: function() {\n        this.settings.preRegistrationSubmit(\n          this.attributes,\n          function(postData) {\n            self.registerUser(postData);\n          },\n          function(errors) {\n            self.showErrors(errors);\n          }\n        );\n      },\n    });\n\n    return new RegistrationControllerModel();\n  },\n  showErrors: function(error, hideRegisterButton) {\n    //for parseSchema error hide form and show error at form level\n    if (error.callback === 'parseRegistrationSchema' && error.errorCauses) {\n      error.errorSummary = _.clone(error.errorCauses[0].errorSummary);\n      delete error.errorCauses;\n    }\n    //show error on form\n    this.model.trigger('error', this.model, {\n      responseJSON: error,\n    });\n\n    //throw registration error\n    const errMsg = error.callback ? error.callback + ':' + error.errorSummary : error.errorSummary;\n\n    Util.triggerAfterError(this, new RegistrationError(errMsg));\n\n    if (hideRegisterButton) {\n      this.$el.find('.button-primary').hide();\n    }\n  },\n  fetchInitialData: function() {\n    const self = this;\n\n    // register parse complete event listener\n    self.state.get('schema').on('parseComplete', function(updatedSchema) {\n      const modelProperties = updatedSchema.properties.createModelProperties();\n\n      self.settings.set('defaultPolicyId', updatedSchema.properties.defaultPolicyId);\n\n      // create model\n      self.model = self.createRegistrationModel(modelProperties);\n      // create form\n      const RegistrationControllerForm = Form.extend({\n        layout: 'o-form-theme',\n        autoSave: true,\n        noCancelButton: true,\n        title: loc('registration.form.title', 'login'),\n        save: loc('registration.form.submit', 'login'),\n        modelEvents : { 'invalid' : 'modifyErrors' },\n        hasSavingState: true,\n        customSavingState: {\n          start: 'startSaving',\n          stop: 'stopSaving',\n        },\n        modifyErrors: function(model, errorResp) {\n          // overwrite courage errorResp object to show custom error message\n          for (let formFieldName in errorResp) {\n            if (errorResp[formFieldName] === 'model.validation.field.string.minLength') {\n              errorResp[formFieldName] = loc('registration.model.validation.field.string.too.short', 'login', \n                [model.props[formFieldName].minLength]\n              );\n            } else if (errorResp[formFieldName] === 'model.validation.field.string.maxLength') {\n              errorResp[formFieldName] = loc('registration.model.validation.field.string.too.long', 'login', \n                [model.props[formFieldName].maxLength + 1]\n              );\n            }\n          }\n        },\n      });\n      const form = new RegistrationControllerForm(self.toJSON());\n\n      // add form\n      self.add(form);\n      // add footer\n      self.footer = new self.Footer(self.toJSON());\n      self.add(self.footer);\n      self.addListeners();\n      if (updatedSchema.error) {\n        self.showErrors(updatedSchema.error, true);\n      } else {\n        // add fields\n        updatedSchema.properties.each(function(schemaProperty) {\n          const inputOptions = RegistrationFormFactory.createInputOptions(schemaProperty);\n          const subSchemas = schemaProperty.get('subSchemas');\n          const name = schemaProperty.get('name');\n\n          form.addInput(inputOptions);\n          if (name === 'password' && subSchemas) {\n            form.add(SubSchema.extend({ id: 'subschemas-' + name, subSchemas: subSchemas }));\n          }\n        });\n        const requiredFieldsLabel = hbs('<span class=\"required-fields-label\">{{label}}</span>')({\n          label: loc('registration.required.fields.label', 'login'),\n        });\n\n        form.add(requiredFieldsLabel);\n      }\n    });\n    // fetch schema from API, returns a jqXHR. Wrap it in a Q\n    return Q(this.state.get('schema').fetch());\n  },\n  Footer: RegistrationControllerFooter,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport Util from 'util/Util';\nimport ValidationUtil from 'v1/util/ValidationUtil';\nimport ContactSupport from 'v1/views/shared/ContactSupport';\nimport TextBox from 'v1/views/shared/TextBox';\nconst UnlockAccountControllernoFactorsError = View.extend({\n  template: hbs`\n      <div class=\"okta-form-infobox-error infobox infobox-error\" role=\"alert\">\n        <span class=\"icon error-16\"></span>\n        <p>{{i18n code=\"account.unlock.noFactorsEnabled\" bundle=\"login\"}}</p>\n      </div>\n    `,\n});\nconst UnlockAccountControllerFooter = View.extend({\n  template: hbs(\n    '\\\n      <a href=\"#\" class=\"link help js-back\" data-se=\"back-link\">\\\n        {{i18n code=\"goback\" bundle=\"login\"}}\\\n      </a>\\\n      {{#if helpSupportNumber}}\\\n      <a href=\"#\" class=\"link goto js-contact-support\">\\\n        {{i18n code=\"mfa.noAccessToEmail\" bundle=\"login\"}}\\\n      </a>\\\n      {{/if}}\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .js-back': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n    'click .js-contact-support': function(e) {\n      e.preventDefault();\n      this.state.trigger('contactSupport');\n      this.$('.js-contact-support').hide();\n    },\n  },\n  getTemplateData: function() {\n    return this.settings.pick('helpSupportNumber');\n  },\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    this.options.appState.trigger('navigate', '');\n  },\n});\nexport default FormController.extend({\n  className: 'account-unlock',\n  Model: {\n    props: {\n      username: ['string', true],\n      factorType: ['string', true],\n    },\n    validate: function() {\n      return ValidationUtil.validateUsername(this);\n    },\n    save: function() {\n      const self = this;\n\n      return this.startTransaction(function(authClient) {\n        return authClient.unlockAccount({\n          username: self.settings.transformUsername(self.get('username'), Enums.UNLOCK_ACCOUNT),\n          factorType: self.get('factorType'),\n        });\n      }).catch(function() {\n        //need empty fail handler on model to display errors on form\n      });\n    },\n  },\n  Form: {\n    noButtonBar: true,\n    title: _.partial(loc, 'account.unlock.title', 'login'),\n    formChildren: function() {\n      const smsEnabled = this.settings.get('features.smsRecovery');\n      /*eslint complexity: [2, 9] max-statements: [2, 24] */\n\n      const callEnabled = this.settings.get('features.callRecovery');\n      const emailEnabled = this.settings.get('features.emailRecovery');\n      const noFactorsEnabled = !(smsEnabled || callEnabled || emailEnabled);\n      const formChildren = [];\n      const form = this;\n\n      if (noFactorsEnabled) {\n        this.add(UnlockAccountControllernoFactorsError, '.o-form-error-container');\n      } else {\n        formChildren.push(\n          FormType.Input({\n            label: loc('account.unlock.email.or.username.placeholder', 'login'),\n            'label-top': true,\n            explain: Util.createInputExplain(\n              'account.unlock.email.or.username.tooltip',\n              'account.unlock.email.or.username.placeholder',\n              'login'\n            ),\n            'explain-top': true,\n            name: 'username',\n            input: TextBox,\n            inputId: 'account-recovery-username',\n            type: 'text',\n            inlineValidation: false,\n          })\n        );\n\n        if (smsEnabled || callEnabled) {\n          formChildren.push(\n            FormType.View({\n              View: View.extend({\n                template: hbs(\n                  '\\\n                  <p class=\"mobile-recovery-hint\">\\\n                    {{i18n code=\"recovery.mobile.hint\" bundle=\"login\" arguments=\"mobileFactors\"}}\\\n                  </p>'\n                ),\n                getTemplateData: function() {\n                  let mobileFactors;\n\n                  if (smsEnabled && callEnabled) {\n                    mobileFactors = loc('recovery.smsOrCall');\n                  } else if (callEnabled) {\n                    mobileFactors = loc('recovery.call');\n                  } else {\n                    mobileFactors = loc('recovery.sms');\n                  }\n                  return { mobileFactors: mobileFactors };\n                },\n              }),\n            })\n          );\n        }\n\n        if (smsEnabled) {\n          this.$el.addClass('forgot-password-sms-enabled');\n          formChildren.push(\n            this.createRecoveryFactorButton(\n              'sms-button',\n              'account.unlock.sendText',\n              Enums.RECOVERY_FACTOR_TYPE_SMS,\n              form\n            )\n          );\n          this.setDefaultFactorType(Enums.RECOVERY_FACTOR_TYPE_SMS);\n        }\n        if (callEnabled) {\n          this.$el.addClass('forgot-password-call-enabled');\n          formChildren.push(\n            this.createRecoveryFactorButton(\n              'call-button',\n              'account.unlock.voiceCall',\n              Enums.RECOVERY_FACTOR_TYPE_CALL,\n              form\n            )\n          );\n          this.setDefaultFactorType(Enums.RECOVERY_FACTOR_TYPE_CALL);\n        }\n        if (emailEnabled) {\n          this.$el.addClass('forgot-password-email-enabled');\n          formChildren.push(\n            this.createRecoveryFactorButton(\n              'email-button',\n              'account.unlock.sendEmail',\n              Enums.RECOVERY_FACTOR_TYPE_EMAIL,\n              form\n            )\n          );\n          this.setDefaultFactorType(Enums.RECOVERY_FACTOR_TYPE_EMAIL);\n        }\n      }\n\n      return formChildren;\n    },\n    initialize: function() {\n      this.listenTo(this, 'save', function() {\n        this.options.appState.set('username', this.model.get('username'));\n        this.model.save();\n      });\n\n      this.listenTo(this.state, 'contactSupport', function() {\n        this.add(ContactSupport, '.o-form-error-container');\n      });\n    },\n    setDefaultFactorType: function(factorType) {\n      if (_.isEmpty(this.model.get('factorType'))) {\n        this.model.set('factorType', factorType);\n      }\n    },\n    createRecoveryFactorButton: function(className, labelCode, factorType, form) {\n      return FormType.Button({\n        attributes: { 'data-se': className },\n        className: 'button button-primary button-wide ' + className,\n        title: loc(labelCode, 'login'),\n        click: function() {\n          form.clearErrors();\n          if (this.model.isValid()) {\n            this.model.set('factorType', factorType);\n            form.trigger('save', this.model);\n          }\n        },\n      });\n    },\n  },\n  Footer: UnlockAccountControllerFooter,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport Enums from 'util/Enums';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nexport default FormController.extend({\n  className: 'account-unlock-email-sent',\n  Model: function() {\n    return {\n      local: {\n        userFullName: ['string', false, this.options.appState.get('userFullName')],\n      },\n    };\n  },\n\n  Form: {\n    title: _.partial(loc, 'account.unlock.emailSent.title', 'login'),\n    subtitle: function() {\n      const username = this.options.appState.get('username');\n\n      return loc('account.unlock.emailSent.desc', 'login', [username]);\n    },\n    noButtonBar: true,\n    attributes: { 'data-se': 'unlock-email-sent' },\n    formChildren: function() {\n      return [\n        FormType.Button({\n          title: loc('goback', 'login'),\n          className: 'button button-primary button-wide',\n          attributes: { 'data-se': 'back-button' },\n          click: function() {\n            this.state.set('navigateDir', Enums.DIRECTION_BACK);\n            this.options.appState.trigger('navigate', '');\n          },\n        }),\n      ];\n    },\n  },\n\n  initialize: function(options) {\n    this.settings.callGlobalSuccess(Enums.UNLOCK_ACCOUNT_EMAIL_SENT, {\n      username: options.appState.get('username'),\n    });\n  },\n});\n","/*!\n * Copyright (c) 2018-2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc, internal } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nimport FooterMFA from 'v1/views/shared/FooterMFA';\nconst { Util } = internal.util;\nexport default FormController.extend({\n  className: 'verify-custom-factor custom-factor-form',\n\n  Model: {\n    props: {\n      rememberDevice: 'boolean',\n    },\n\n    initialize: function() {\n      const rememberDevice = FactorUtil.getRememberDeviceValue(this.appState);\n\n      // set the initial value for remember device (Cannot do this while defining the\n      // local property because this.settings would not be initialized there yet).\n      this.set('rememberDevice', rememberDevice);\n      if (this.settings.get('features.skipIdpFactorVerificationBtn') &&\n        !this.appState.get('lastFailedChallengeFactorData')) {\n        this.set('provider', 'CUSTOM');\n        this.set('factorType', 'claims_provider');\n        this.save();\n      }\n    },\n\n    save: function() {\n      const rememberDevice = !!this.get('rememberDevice');\n\n      return this.manageTransaction((transaction, setTransaction) => {\n        const data = {\n          rememberDevice: rememberDevice,\n        };\n\n        const factor = _.findWhere(transaction.factors, {\n          provider: this.get('provider'),\n          factorType: this.get('factorType'),\n        });\n\n        return factor\n          .verify(data)\n          .then(trans => {\n            setTransaction(trans);\n            const url = this.appState.get('verifyCustomFactorRedirectUrl');\n\n            if (url !== null) {\n              Util.redirect(url);\n            }\n          })\n          .catch(function(err) {\n            throw err;\n          });\n      });\n    },\n  },\n\n  Form: function() {\n    const factors = this.options.appState.get('factors');\n    const factor = factors.findWhere({\n      provider: this.options.provider,\n      factorType: this.options.factorType,\n    });\n    const vendorName = factor.get('vendorName');\n    const saveText = loc('mfa.challenge.verify', 'login');\n    const lastFailedChallengeFactorData = this.options.appState.get('lastFailedChallengeFactorData');\n    let subtitle = loc('verify.customFactor.subtitle', 'login', [vendorName]);\n\n    if (this.settings.get('features.skipIdpFactorVerificationBtn') && !lastFailedChallengeFactorData) {\n      subtitle = loc('verify.customFactor.subtitle.redirect', 'login', [vendorName]);\n\n      this.listenTo(this.model, 'error', () => {\n        subtitle = loc('verify.customFactor.subtitle', 'login', [vendorName]);\n        this.$('.o-form-explain').text(subtitle);\n      });\n    }\n    return {\n      autoSave: true,\n      title: vendorName,\n      save: saveText,\n      subtitle: subtitle,\n      attributes: { 'data-se': 'factor-custom' },\n      initialize: function() {\n        if (this.options.appState.get('allowRememberDevice')) {\n          this.addInput({\n            label: false,\n            'label-top': true,\n            placeholder: this.options.appState.get('rememberDeviceLabel'),\n            className: 'margin-btm-0',\n            name: 'rememberDevice',\n            type: 'checkbox',\n          });\n        }\n      },\n\n      formChildren: function() {\n        const result = [];\n        const lastFailedChallengeFactorData = this.options.appState.get('lastFailedChallengeFactorData');\n\n        if (this.settings.get('features.skipIdpFactorVerificationBtn') && !lastFailedChallengeFactorData) {\n          result.push(\n            FormType.View({\n              View:\n                '<div data-se=\"custom-factor-waiting\" class=\"okta-waiting-spinner\"></div>'\n            })\n          );\n        }\n\n        if (lastFailedChallengeFactorData) {\n          result.push(\n            FormType.View(\n              { View: new HtmlErrorMessageView({ message: lastFailedChallengeFactorData.errorMessage }) },\n              { selector: '.o-form-error-container' }\n            )\n          );\n        }\n        return result;\n      },\n    };\n  },\n\n  postRender() {\n    if (this.settings.get('features.skipIdpFactorVerificationBtn') &&\n      !this.options.appState.get('lastFailedChallengeFactorData')) {\n      this.$('.o-form-button-bar').hide();\n      this.$('.okta-waiting-spinner').show();\n    }\n  },\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaChallenge')) {\n      return true;\n    }\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n\n  initialize: function() {\n    this.model.set('provider', this.options.provider);\n    this.model.set('factorType', this.options.factorType);\n\n    if (this.settings.get('features.skipIdpFactorVerificationBtn')) {\n      this.listenTo(this.model, 'error', () => {\n        this.$('.okta-waiting-spinner').hide();\n        this.$('.o-form-button-bar').show();\n      });\n    }\n    this.addFooter(FooterMFA);\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint camelcase: 0 */\nimport { $, _, loc } from '@okta/courage';\nimport Duo from '@okta/duo';\nimport Q from 'q';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FooterMFA from 'v1/views/shared/FooterMFA';\n\nexport default FormController.extend({\n  className: 'mfa-verify-duo duo-form',\n\n  Model: {\n    props: {\n      host: 'string',\n      signature: 'string',\n      postAction: 'string',\n      factorId: 'string',\n      stateToken: 'string',\n      rememberDevice: 'boolean',\n    },\n\n    initialize: function() {\n      const rememberDevice = FactorUtil.getRememberDeviceValue(this.appState);\n\n      // set the initial value for remember device (Cannot do this while defining the\n      // local property because this.settings would not be initialized there yet).\n      this.set('rememberDevice', rememberDevice);\n    },\n\n    getInitOptions: function() {\n      const rememberDevice = !!this.get('rememberDevice');\n\n      return this.doTransaction(function(transaction) {\n        const data = {\n          rememberDevice: rememberDevice,\n        };\n\n        const factor = _.findWhere(transaction.factors, {\n          provider: 'DUO',\n          factorType: 'web',\n        });\n\n        return factor.verify(data).catch(function(err) {\n          // Clean up the cookie on failure.\n          throw err;\n        });\n      }, true /* rethrow errors */);\n    },\n\n    verify: function(signedResponse) {\n      const url = this.get('postAction');\n      const factorId = this.get('factorId');\n      const self = this;\n      let data = {\n        id: factorId,\n        stateToken: this.get('stateToken'),\n        sig_response: signedResponse,\n      };\n      // Note: We should be doing this in OktaAuth! Fix when it's updated.\n\n      const rememberDevice = this.get('rememberDevice');\n      // We don't actually use authClient.post() here (unlike all the other cases in the\n      // sign-in widget) since the endpoint is wired to accept serialized form post instead\n      // of a JSON post ($.post() is different from authClient.post() in that in $.post(),\n      // jquery decides the Content-Type instead of it being a JSON type). Enroll/Verify DUO\n      // are the only two places where we actually do this.\n      // NOTE - If we ever decide to change this, we should test this very carefully.\n\n      return Q($.post(url, data))\n        .then(function() {\n          return self.doTransaction(function(transaction) {\n            let data;\n\n            if (rememberDevice) {\n              data = { rememberDevice: rememberDevice };\n            }\n            return transaction.poll(data);\n          });\n        })\n        .catch(function(err) {\n          self.trigger('error', self, err.xhr);\n        });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    noButtonBar: true,\n    title: _.partial(loc, 'factor.duo'),\n    attributes: { 'data-se': 'factor-duo' },\n\n    postRender: function() {\n      this.add('<iframe frameborder=\"0\" title=\"' + this.title() + '\"></iframe>');\n      if (this.options.appState.get('allowRememberDevice')) {\n        this.addInput({\n          label: false,\n          'label-top': true,\n          placeholder: this.options.appState.get('rememberDeviceLabel'),\n          className: 'margin-btm-0',\n          name: 'rememberDevice',\n          type: 'checkbox',\n        });\n      }\n      Duo.init({\n        host: this.model.get('host'),\n        sig_request: this.model.get('signature'),\n        iframe: this.$('iframe').get(0),\n        post_action: _.bind(this.model.verify, this.model),\n      });\n    },\n  },\n\n  fetchInitialData: function() {\n    const self = this;\n\n    return this.model.getInitOptions().then(function(trans) {\n      const res = trans.data;\n\n      if (\n        !res._embedded ||\n        !res._embedded.factor ||\n        !res._embedded.factor._embedded ||\n        !res._embedded.factor._embedded.verification\n      ) {\n        throw new Error('Response does not have duo verification options');\n      }\n      const verification = res._embedded.factor._embedded.verification;\n\n      self.model.set({\n        host: verification.host,\n        signature: verification.signature,\n        postAction: verification._links.complete.href,\n        factorId: res._embedded.factor.id,\n        stateToken: res.stateToken,\n      });\n    });\n  },\n\n  trapAuthResponse: function() {\n    if (this.options.appState.get('isMfaChallenge')) {\n      return true;\n    }\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n\n  Footer: FooterMFA,\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity:[2, 10], max-params: [2, 11] */\nimport { _, $, loc, View, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport FooterWithBackLink from 'v1/views/shared/FooterWithBackLink';\nlet { Util } = internal.util;\nexport default FormController.extend({\n  className: 'piv-cac-card',\n  Model: {\n    save: async function() {\n      this.trigger('request');\n      const self = this;\n      const pivConfig = this.settings.get('piv');\n      const data = {\n        fromURI: this.settings.get('relayState'),\n        isCustomDomain: pivConfig.isCustomDomain,\n        customDomain: pivConfig.customDomain,\n      };\n\n      try {\n        await this.getCert(pivConfig.certAuthUrl);\n        const res = await this.postCert(pivConfig.certAuthUrl, data);\n        Util.redirect(res.redirectUrl);\n      } catch (err) {\n        if (_.isEmpty(err.responseJSON) && !err.responseText) {\n          err.responseJSON = {\n            errorSummary: loc('piv.cac.error', 'login'),\n          };\n        }\n        self.trigger('error', self, err);\n      }\n    },\n\n    getCert: function(certAuthUrl) {\n      return $.get({\n        url: certAuthUrl,\n        xhrFields: {\n          withCredentials: true,\n        },\n        beforeSend: function() {\n          // overriding this function to prevent our jquery-wrapper from\n          // setting headers. Need to keep this a simple request in order for\n          // PIV / CAC to work in IE.\n        },\n      });\n    },\n\n    postCert: function(certAuthUrl, data) {\n      return $.post({\n        url: certAuthUrl,\n        xhrFields: {\n          withCredentials: true,\n        },\n        data: JSON.stringify(data),\n        contentType: 'text/plain',\n        beforeSend: function() {\n          // overriding this function to prevent our jquery-wrapper from\n          // setting headers. Need to keep this a simple request in order for\n          // PIV / CAC to work in IE.\n        },\n      });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    hasSavingState: false,\n    title: _.partial(loc, 'piv.cac.title', 'login'),\n    className: 'piv-cac-card',\n    noCancelButton: true,\n    save: _.partial(loc, 'retry', 'login'),\n    modelEvents: {\n      request: '_startEnrollment',\n      error: '_stopEnrollment',\n    },\n\n    formChildren: [\n      FormType.View({\n        View: View.extend({\n          template: hbs(\n            '<div class=\"piv-verify-text\">\\\n               <p>{{i18n code=\"piv.cac.card.insert\" bundle=\"login\"}}</p>\\\n               <div data-se=\"piv-waiting\" class=\"okta-waiting-spinner\"></div>\\\n             </div>'\n          ),\n        }),\n      }),\n    ],\n\n    _startEnrollment: function() {\n      this.$('.okta-waiting-spinner').show();\n      this.$('.o-form-button-bar').hide();\n    },\n\n    _stopEnrollment: function() {\n      this.$('.okta-waiting-spinner').hide();\n      this.$('.o-form-button-bar').show();\n    },\n\n    postRender: function() {\n      _.defer(() => {\n        this.model.save();\n      });\n    },\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n\n  Footer: FooterWithBackLink,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* global u2f */\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Q from 'q';\nimport 'u2f-api-polyfill';\nimport { U2FError } from 'util/Errors';\nimport FactorUtil from 'util/FactorUtil';\nimport FidoUtil from 'util/FidoUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nimport FooterMFA from 'v1/views/shared/FooterMFA';\n\nfunction getRegisteredKeysSequence(factors) {\n  const keys = [];\n\n  _.each(factors, function(factor) {\n    keys.push({\n      version: factor.profile.version,\n      keyHandle: factor.profile.credentialId,\n    });\n  });\n  return keys;\n}\n\nexport default FormController.extend({\n  className: 'mfa-verify verify-u2f',\n  Model: {\n    props: {\n      rememberDevice: 'boolean',\n    },\n\n    initialize: function() {\n      const rememberDevice = FactorUtil.getRememberDeviceValue(this.appState);\n\n      // set the initial value for remember device (Cannot do this while defining the\n      // local property because this.settings would not be initialized there yet).\n      this.set('rememberDevice', rememberDevice);\n    },\n\n    save: function() {\n      this.trigger('request');\n\n      return this.doTransaction(function(transaction) {\n        let factor;\n\n        if (transaction.factorTypes) {\n          factor = _.findWhere(transaction.factorTypes, {\n            factorType: 'u2f',\n          });\n        } else {\n          factor = _.findWhere(transaction.factors, {\n            factorType: 'u2f',\n            provider: 'FIDO',\n          });\n        }\n        const self = this;\n\n        return factor.verify().then(function(transaction) {\n          let registeredKeys;\n          let appId;\n          let nonce;\n\n          if (transaction.factors) {\n            const factors = transaction.factors;\n\n            appId = factors[0]['profile']['appId'];\n            nonce = transaction.challenge.nonce;\n            registeredKeys = getRegisteredKeysSequence(factors);\n          } else {\n            const factorData = transaction.factor;\n\n            appId = factorData.profile.appId;\n            nonce = factorData.challenge.nonce;\n            registeredKeys = [{ version: FidoUtil.getU2fVersion(), keyHandle: factorData.profile.credentialId }];\n          }\n          self.trigger('request');\n\n          const deferred = Q.defer();\n\n          u2f.sign(appId, nonce, registeredKeys, function(data) {\n            self.trigger('errors:clear');\n            if (data.errorCode && data.errorCode !== 0) {\n              const isOneFactor = self.options.appState.get('factors').length === 1;\n\n              deferred.reject(\n                new U2FError({\n                  xhr: {\n                    responseJSON: {\n                      errorSummary: FidoUtil.getU2fVerifyErrorMessageByCode(data.errorCode, isOneFactor),\n                    },\n                  },\n                })\n              );\n            } else {\n              const rememberDevice = !!self.get('rememberDevice');\n\n              return factor\n                .verify({\n                  clientData: data.clientData,\n                  signatureData: data.signatureData,\n                  rememberDevice: rememberDevice,\n                })\n                .then(deferred.resolve);\n            }\n          });\n          return deferred.promise;\n        });\n      })\n        .catch(() => {});\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    hasSavingState: false,\n    title: _.partial(loc, 'factor.u2f', 'login'),\n    className: 'verify-u2f-form',\n    noCancelButton: true,\n    save: _.partial(loc, 'verify.u2f.retry', 'login'),\n    noButtonBar: function() {\n      return !FidoUtil.isU2fAvailable();\n    },\n    modelEvents: {\n      request: '_startEnrollment',\n      error: '_stopEnrollment',\n    },\n\n    formChildren: function() {\n      const result = [];\n\n      if (!FidoUtil.isU2fAvailable()) {\n        let errorMessageKey = 'u2f.error.factorNotSupported';\n\n        if (this.options.appState.get('factors').length === 1) {\n          errorMessageKey = 'u2f.error.factorNotSupported.oneFactor';\n        }\n        result.push(\n          FormType.View(\n            { View: new HtmlErrorMessageView({ message: loc(errorMessageKey, 'login') }) },\n            { selector: '.o-form-error-container' }\n          )\n        );\n      } else {\n        result.push(\n          FormType.View({\n            View: View.extend({\n              template: hbs(\n                '\\\n            <div class=\"u2f-verify-text\">\\\n              <p>{{i18n code=\"verify.u2f.instructions\" bundle=\"login\"}}</p>\\\n              <p>{{i18n code=\"verify.u2f.instructionsBluetooth\" bundle=\"login\"}}</p>\\\n              <div data-se=\"u2f-waiting\" class=\"okta-waiting-spinner\"></div>\\\n            </div>'\n              ),\n            }),\n          })\n        );\n      }\n\n      if (this.options.appState.get('allowRememberDevice')) {\n        result.push(\n          FormType.Input({\n            label: false,\n            'label-top': true,\n            placeholder: this.options.appState.get('rememberDeviceLabel'),\n            className: 'margin-btm-0',\n            name: 'rememberDevice',\n            type: 'checkbox',\n          })\n        );\n      }\n\n      return result;\n    },\n\n    postRender: function() {\n      _.defer(() => {\n        if (FidoUtil.isU2fAvailable()) {\n          this.model.save();\n        } else {\n          this.$('[data-se=\"u2f-waiting\"]').addClass('hide');\n        }\n      });\n    },\n\n    _startEnrollment: function() {\n      this.$('.okta-waiting-spinner').removeClass('hide');\n      this.$('.o-form-button-bar').hide();\n    },\n\n    _stopEnrollment: function() {\n      this.$('.okta-waiting-spinner').addClass('hide');\n      this.$('.o-form-button-bar').show();\n    },\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n\n  Footer: FooterMFA,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity:[2, 10], max-params: [2, 11] */\nimport { _, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Q from 'q';\nimport CryptoUtil from 'util/CryptoUtil';\nimport { WebauthnAbortError, WebAuthnError } from 'util/Errors';\nimport FactorUtil from 'util/FactorUtil';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport webauthn from 'util/webauthn';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nimport FooterMFA from 'v1/views/shared/FooterMFA';\n\nfunction getAllowCredentials(factors) {\n  const allowCredentials = [];\n\n  _.each(factors, function(factor) {\n    allowCredentials.push({\n      type: 'public-key',\n      id: CryptoUtil.strToBin(factor.profile.credentialId),\n    });\n  });\n  return allowCredentials;\n}\n\nexport default FormController.extend({\n  className: 'mfa-verify verify-webauthn',\n  Model: {\n    props: {\n      rememberDevice: 'boolean',\n    },\n\n    initialize: function() {\n      const rememberDevice = FactorUtil.getRememberDeviceValue(this.appState);\n\n      // set the initial value for remember device (Cannot do this while defining the\n      // local property because this.settings would not be initialized there yet).\n      this.set('rememberDevice', rememberDevice);\n      this.appState.on('factorSwitched signOut', () => {\n        if (this.webauthnAbortController) {\n          this.webauthnAbortController.abort();\n          this.webauthnAbortController = null;\n        }\n      });\n    },\n\n    save: function() {\n      this.trigger('request');\n\n      return this.doTransaction(function(transaction) {\n        let factor;\n\n        if (transaction.factorTypes) {\n          factor = _.findWhere(transaction.factorTypes, {\n            factorType: 'webauthn',\n          });\n        } else {\n          factor = _.findWhere(transaction.factors, {\n            factorType: 'webauthn',\n            provider: 'FIDO',\n          });\n        }\n\n        const self = this;\n\n        return factor.verify().then(function(transaction) {\n          let allowCredentials;\n          let challenge;\n\n          if (transaction.factors) {\n            const factors = transaction.factors;\n\n            challenge = transaction.challenge;\n            allowCredentials = getAllowCredentials(factors);\n          } else {\n            const factorData = transaction.factor;\n\n            challenge = factorData.challenge;\n            allowCredentials = getAllowCredentials([factorData]);\n          }\n          self.trigger('request');\n          // verify via browser webauthn js\n\n          const options = _.extend({}, challenge, {\n            allowCredentials: allowCredentials,\n            challenge: CryptoUtil.strToBin(challenge.challenge),\n          });\n\n          // AbortController is not supported in IE11\n          if (typeof AbortController !== 'undefined') {\n            self.webauthnAbortController = new AbortController();\n          }\n          return new Q(\n            // navigator.credentials is not supported in IE11\n            // eslint-disable-next-line compat/compat\n            navigator.credentials.get({\n              publicKey: options,\n              signal: self.webauthnAbortController && self.webauthnAbortController.signal,\n            })\n          )\n            .then(function(assertion) {\n              const rememberDevice = !!self.get('rememberDevice');\n\n              return factor.verify({\n                clientData: CryptoUtil.binToStr(assertion.response.clientDataJSON),\n                authenticatorData: CryptoUtil.binToStr(assertion.response.authenticatorData),\n                signatureData: CryptoUtil.binToStr(assertion.response.signature),\n                rememberDevice: rememberDevice,\n              });\n            })\n            .catch(function(error) {\n              self.trigger('errors:clear');\n              // Do not display if it is abort error triggered by code when switching.\n              // self.webauthnAbortController would be null if abort was triggered by code.\n              if (!self.webauthnAbortController) {\n                throw new WebauthnAbortError();\n              } else {\n                throw new WebAuthnError({\n                  xhr: { responseJSON: { errorSummary: error.message } },\n                });\n              }\n            })\n            .finally(function() {\n              // unset webauthnAbortController on successful authentication or error\n              self.webauthnAbortController = null;\n            });\n        });\n      })\n        .catch(() => {});\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    hasSavingState: false,\n    title: _.partial(loc, 'factor.webauthn.biometric', 'login'),\n    className: 'verify-webauthn-form',\n    noCancelButton: true,\n    save: _.partial(loc, 'mfa.challenge.verify', 'login'),\n    noButtonBar: function() {\n      return !webauthn.isNewApiAvailable();\n    },\n    modelEvents: {\n      request: '_startEnrollment',\n      error: '_stopEnrollment',\n    },\n\n    formChildren: function() {\n      const children = [];\n\n      if (webauthn.isNewApiAvailable()) {\n        children.push(\n          FormType.View({\n            View: View.extend({\n              template: hbs(\n                '<div class=\"webauthn-verify-text\">\\\n                 <p>{{i18n code=\"verify.webauthn.biometric.instructions\" bundle=\"login\"}}</p>\\\n                 <div data-se=\"webauthn-waiting\" class=\"okta-waiting-spinner\"></div>\\\n               </div>'\n              ),\n            }),\n          })\n        );\n      } else {\n        let errorMessageKey = 'webauthn.biometric.error.factorNotSupported';\n\n        if (this.options.appState.get('factors').length === 1) {\n          errorMessageKey = 'webauthn.biometric.error.factorNotSupported.oneFactor';\n        }\n        children.push(\n          FormType.View(\n            { View: new HtmlErrorMessageView({ message: loc(errorMessageKey, 'login') }) },\n            { selector: '.o-form-error-container' }\n          )\n        );\n      }\n\n      if (this.options.appState.get('allowRememberDevice')) {\n        children.push(\n          FormType.Input({\n            label: false,\n            'label-top': true,\n            placeholder: this.options.appState.get('rememberDeviceLabel'),\n            className: 'margin-btm-0',\n            name: 'rememberDevice',\n            type: 'checkbox',\n          })\n        );\n      }\n\n      return children;\n    },\n\n    _startEnrollment: function() {\n      this.$('.okta-waiting-spinner').show();\n      this.$('.o-form-button-bar').hide();\n    },\n\n    _stopEnrollment: function() {\n      this.$('.okta-waiting-spinner').hide();\n      this.$('.o-form-button-bar [type=\"submit\"]')[0].value = loc('verify.u2f.retry', 'login');\n      this.$('.o-form-button-bar').show();\n    },\n  },\n\n  postRender: function() {\n    _.defer(() => {\n      // Trigger browser prompt automatically for other browsers for better UX.\n      if (webauthn.isNewApiAvailable() && !BrowserFeatures.isSafari()) {\n        this.model.save();\n      }\n    });\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n\n  Footer: FooterMFA,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, loc } from '@okta/courage';\nimport FormController from 'v1/util/FormController';\nimport FormType from 'v1/util/FormType';\nimport webauthn from 'util/webauthn';\nimport HtmlErrorMessageView from 'v1/views/mfa-verify/HtmlErrorMessageView';\nimport FooterMFA from 'v1/views/shared/FooterMFA';\nimport Spinner from 'v1/views/shared/Spinner';\nexport default FormController.extend({\n  className: 'mfa-verify verify-windows-hello',\n  Model: {\n    local: {\n      __autoTriggered__: 'boolean',\n    },\n\n    save: function() {\n      if (!webauthn.isAvailable()) {\n        return;\n      }\n\n      this.trigger('request');\n      const model = this;\n\n      return this.doTransaction(function(transaction) {\n        const factor = _.findWhere(transaction.factors, {\n          factorType: 'webauthn',\n          provider: 'FIDO',\n        });\n\n        return factor.verify().then(function(verifyData) {\n          const factorData = verifyData.factor;\n\n          return webauthn\n            .getAssertion(factorData.challenge.nonce, [{ id: factorData.profile.credentialId }])\n            .then(function(assertion) {\n              return factor.verify({\n                authenticatorData: assertion.authenticatorData,\n                clientData: assertion.clientData,\n                signatureData: assertion.signature,\n              });\n            })\n            .then(function(data) {\n              model.trigger('sync');\n              model.trigger('signIn');\n              return data;\n            })\n            .catch(function(error) {\n              switch (error.message) {\n              case 'AbortError':\n              case 'NotFoundError':\n              case 'NotSupportedError':\n                model.trigger('abort', error.message);\n                return transaction;\n              }\n\n              throw error;\n            });\n        });\n      });\n    },\n  },\n\n  Form: {\n    autoSave: true,\n    hasSavingState: false,\n    title: _.partial(loc, 'factor.windowsHello', 'login'),\n    subtitle: function() {\n      return webauthn.isAvailable() ? loc('verify.windowsHello.subtitle', 'login') : '';\n    },\n    save: _.partial(loc, 'verify.windowsHello.save', 'login'),\n\n    customSavingState: {\n      stop: 'abort',\n    },\n\n    modelEvents: function() {\n      if (!webauthn.isAvailable()) {\n        return {};\n      }\n\n      return {\n        request: '_startEnrollment',\n        error: '_stopEnrollment',\n        abort: '_stopEnrollment',\n        signIn: '_successEnrollment',\n      };\n    },\n\n    noButtonBar: function() {\n      return !webauthn.isAvailable();\n    },\n\n    formChildren: function() {\n      const result = [];\n\n      if (!webauthn.isAvailable()) {\n        result.push(\n          FormType.View(\n            { View: new HtmlErrorMessageView({ message: loc('enroll.windowsHello.error.notWindows', 'login') }) },\n            { selector: '.o-form-error-container' }\n          )\n        );\n      }\n\n      result.push(FormType.View({ View: new Spinner({ model: this.model, visible: false }) }));\n\n      return result;\n    },\n\n    postRender: function() {\n      if (this.options.appState.get('factors').length === 1 && !this.model.get('__autoTriggered__')) {\n        this.model.set('__autoTriggered__', true);\n        this.model.save();\n      }\n    },\n\n    _startEnrollment: function() {\n      this.subtitle = loc('verify.windowsHello.subtitle.loading', 'login');\n\n      this.model.trigger('spinner:show');\n      this._resetErrorMessage();\n\n      this.render();\n      this.$('.o-form-button-bar').addClass('hide');\n    },\n\n    _stopEnrollment: function(errorMessage) {\n      this.subtitle = loc('verify.windowsHello.subtitle', 'login');\n\n      this.model.trigger('spinner:hide');\n      this.$('.o-form-button-bar').removeClass('hide');\n\n      let message;\n\n      switch (errorMessage) {\n      case 'NotFoundError':\n        message = this.options.appState.get('factors').length > 1\n          ? loc('verify.windowsHello.error.notFound.selectAnother', 'login')\n          : loc('verify.windowsHello.error.notFound', 'login');\n        break;\n\n      case 'NotSupportedError':\n        message = loc('enroll.windowsHello.error.notConfiguredHtml', 'login');\n        break;\n      }\n\n      this._resetErrorMessage();\n\n      if (message) {\n        const messageView = new HtmlErrorMessageView({\n          message: message,\n        });\n\n        this.$('.o-form-error-container').addClass('o-form-has-errors');\n        this.add(messageView, { selector: '.o-form-error-container' });\n        this._errorMessageView = this.last();\n      }\n\n      this.render();\n    },\n\n    _successEnrollment: function() {\n      this.subtitle = this.settings.get('brandName')\n        ? loc('verify.windowsHello.subtitle.signingIn.specific', 'login', [this.settings.get('brandName')])\n        : loc('verify.windowsHello.subtitle.signingIn.generic', 'login');\n      this.render();\n      this.$('.o-form-button-bar').addClass('hide');\n    },\n\n    _resetErrorMessage: function() {\n      this._errorMessageView && this._errorMessageView.remove();\n      this._errorMessageView = undefined;\n      this.clearErrors();\n    },\n  },\n\n  back: function() {\n    // Empty function on verify controllers to prevent users\n    // from navigating back during 'verify' using the browser's\n    // back button. The URL will still change, but the view will not\n    // More details in OKTA-135060.\n  },\n\n  Footer: FooterMFA,\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nexport default View.extend({\n  template: hbs(\n    '\\\n    {{#if showLink}}\\\n      <a href=\"#\" class=\"link help\" data-se=\"back-link\">\\\n        {{i18n code=\"goback\" bundle=\"login\"}}\\\n      </a>\\\n    {{/if}}\\\n    '\n  ),\n  className: 'auth-footer',\n  events: {\n    'click .help': function(e) {\n      e.preventDefault();\n      this.back();\n    },\n  },\n  back: function() {\n    this.state.set('navigateDir', Enums.DIRECTION_BACK);\n    this.options.appState.trigger('navigate', '');\n  },\n  getTemplateData: function() {\n    const error = this.model.appState.get('flashError');\n    const showLink = error.is && error.is('terminal');\n    return {\n      showLink: showLink\n    };\n  }\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport FormController from 'v1/util/FormController';\nimport FooterWithBackLinkOnError from 'v1/views/shared/FooterWithBackLinkOnError';\nexport default FormController.extend({\n  className: 'error-state',\n  Model: {},\n  Form: {\n    noButtonBar: true,\n  },\n  Footer: FooterWithBackLinkOnError,\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, $, loc, Model } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Factor from 'v1/models/Factor';\nimport Q from 'q';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport { UnsupportedBrowserError } from 'util/Errors';\nconst DEFAULT_APP_LOGO = '/img/logos/default.png';\n\n// Keep track of stateMachine with this special model. Some reasons to not\n// keep it generic:\n// 1. We know exactly what we're using appState for by requiring props\n// 2. Can have some derived functions to help us translate the lastAuthRes\n\nconst USER_NOT_SEEN_ON_DEVICE = '/img/security/unknown.png';\nconst UNDEFINED_USER = '/img/security/default.png';\nconst NEW_USER = '/img/security/unknown-device.png';\nconst NEW_USER_IMAGE_DESCRIPTION = '';\nconst UNDEFINED_USER_IMAGE_DESCRIPTION = '';\nconst UNKNOWN_IMAGE_DESCRIPTION = '';\nconst securityImageUrlTpl = hbs('{{baseUrl}}/login/getimage?username={{username}}');\n\nfunction getSecurityImage(baseUrl, username, deviceFingerprint) {\n  // When the username is empty, we want to show the default image.\n  if (_.isEmpty(username) || _.isUndefined(username)) {\n    return Q({\n      securityImage: UNDEFINED_USER,\n      securityImageDescription: UNDEFINED_USER_IMAGE_DESCRIPTION,\n    });\n  }\n\n  // Reserved characters in the username must be escaped before the query can be safely executed\n  username = encodeURIComponent(username);\n  const url = securityImageUrlTpl({ baseUrl: baseUrl, username: username });\n  const data = {\n    url: url,\n    dataType: 'json',\n  };\n\n  if (deviceFingerprint) {\n    data['headers'] = { 'X-Device-Fingerprint': deviceFingerprint };\n  }\n  return Q($.ajax(data)).then(function(res) {\n    if (res.pwdImg === USER_NOT_SEEN_ON_DEVICE) {\n      // When we get an unknown.png security image from OKTA,\n      // we want to show the unknown-device security image.\n      // We are mapping the server's img url to a new one because\n      // we still need to support the original login page.\n      return {\n        securityImage: NEW_USER,\n        securityImageDescription: NEW_USER_IMAGE_DESCRIPTION,\n      };\n    }\n    return {\n      securityImage: res.pwdImg,\n      securityImageDescription: res.imageDescription || UNKNOWN_IMAGE_DESCRIPTION,\n    };\n  });\n}\n\nfunction getMinutesString(factorLifetimeInMinutes) {\n  if (factorLifetimeInMinutes > 60 && factorLifetimeInMinutes <= 1440) {\n    const lifetimeInHours = factorLifetimeInMinutes / 60;\n\n    return loc('hours', 'login', [lifetimeInHours]);\n  } else if (factorLifetimeInMinutes > 1440) {\n    const lifetimeInDays = factorLifetimeInMinutes / 1440;\n\n    return loc('days', 'login', [lifetimeInDays]);\n  }\n  //Use minutes as the time unit by default\n  if (factorLifetimeInMinutes === 1) {\n    return loc('minutes.oneMinute', 'login');\n  }\n  return loc('minutes', 'login', [factorLifetimeInMinutes]);\n}\n\nfunction getGracePeriodRemainingDays(gracePeriodEndDate) {\n  const endDate = new Date(gracePeriodEndDate).getTime();\n  const remainingDays = Math.floor((endDate - new Date().getTime()) / (1000 * 3600 * 24));\n\n  return remainingDays;\n}\n\nfunction combineFactorsObjects(factorTypes, factors) {\n  const addedFactorTypes = [];\n  const combinedFactors = [];\n\n  _.each(factors, function(factor) {\n    const factorType = factor.factorType;\n\n    if (!_.contains(addedFactorTypes, factorType)) {\n      const factorTypeObj = _.findWhere(factorTypes, { factorType: factorType });\n\n      if (factorTypeObj) {\n        addedFactorTypes.push(factorType);\n        combinedFactors.push(factorTypeObj);\n      } else {\n        combinedFactors.push(factor);\n      }\n    }\n  });\n  return combinedFactors;\n}\n\nexport default Model.extend({\n  initialize: function() {\n    // Handle this in initialize (as opposed to a derived property) because\n    // the operation is asynchronous\n    if (this.settings.get('features.securityImage')) {\n      const self = this;\n\n      this.listenTo(this, 'change:username', function(model, username) {\n        getSecurityImage(this.get('baseUrl'), username, this.get('deviceFingerprint'))\n          .then(function(image) {\n            model.set('securityImage', image.securityImage);\n            model.set('securityImageDescription', image.securityImageDescription);\n            model.unset('deviceFingerprint'); //Fingerprint can only be used once\n          })\n          .fail(function(jqXhr) {\n            // Only notify the consumer on a CORS error\n            if (BrowserFeatures.corsIsNotEnabled(jqXhr)) {\n              self.settings.callGlobalError(new UnsupportedBrowserError(loc('error.enabled.cors')));\n            } else {\n              throw jqXhr;\n            }\n          })\n          .done();\n      });\n    }\n  },\n\n  local: {\n    baseUrl: 'string',\n    lastAuthResponse: ['object', true, {}],\n    transaction: 'object',\n    transactionError: 'object',\n    username: 'string',\n    factors: 'object',\n    policy: 'object',\n    securityImage: ['string', true, UNDEFINED_USER],\n    securityImageDescription: ['string', true, UNDEFINED_USER_IMAGE_DESCRIPTION],\n    userCountryCode: 'string',\n    userPhoneNumber: 'string',\n    factorActivationType: 'string',\n    flashError: 'object',\n    beaconType: 'string',\n    deviceFingerprint: 'string', // valid only once\n    typingPattern: 'string',\n    // Note: languageCode is special in that it is shared between Settings\n    // and AppState. Settings is the *configured* language, and is static.\n    // AppState is the dynamic language state - it can be changed via a\n    // language picker, etc.\n    // Note: this is conceptial feasible but not yet being implemented.\n    languageCode: ['string', true],\n    disableUsername: ['boolean', false, false],\n    trapMfaRequiredResponse: ['boolean', false, false],\n    lastFailedChallengeFactorData: ['object', false],\n  },\n\n  setAuthResponse: function(res) {\n    // Because of MFA_CHALLENGE (i.e. DUO), we need to remember factors\n    // across auth responses. Not doing this, for example, results in being\n    // unable to switch away from the duo factor dropdown.\n    if (res._embedded && res._embedded.policy) {\n      this.set('policy', res._embedded.policy);\n    }\n\n    if (res._embedded && res._embedded.factors) {\n      let factors = res._embedded.factors;\n\n      if (res._embedded.factorTypes) {\n        factors = combineFactorsObjects(res._embedded.factorTypes, factors);\n      }\n\n      const factorsObject = _.map(factors, factor => {\n        factor.settings = this.settings;\n        factor.appState = this;\n        return factor;\n      });\n\n      this.set('factors', new Factor.Collection(factorsObject, { parse: true }));\n    }\n\n    this.set('lastAuthResponse', res);\n  },\n\n  clearLastAuthResponse: function() {\n    this.set('lastAuthResponse', {});\n  },\n\n  setLastFailedChallengeFactorData: function() {\n    this.set('lastFailedChallengeFactorData', {\n      factor: this.get('factor'),\n      errorMessage: this.get('factorResultErrorMessage'),\n    });\n  },\n\n  clearLastFailedChallengeFactorData: function() {\n    this.unset('lastFailedChallengeFactorData');\n  },\n\n  getUser: function() {\n    return this.get('user');\n  },\n\n  derived: {\n    isSuccessResponse: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'SUCCESS';\n      },\n    },\n    isMfaRequired: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'MFA_REQUIRED' || res.status === 'FACTOR_REQUIRED';\n      },\n    },\n    isProfileRequired: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'PROFILE_REQUIRED';\n      },\n    },\n    isMfaEnroll: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'MFA_ENROLL' || res.status === 'FACTOR_ENROLL';\n      },\n    },\n    isMfaChallenge: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'MFA_CHALLENGE' || res.status === 'FACTOR_CHALLENGE';\n      },\n    },\n    isSMSPasswordRecovery: {\n      deps: ['lastAuthResponse'],\n      fn: function({ status, factorType, recoveryType }) {\n        return status === 'RECOVERY_CHALLENGE' &&\n          factorType?.toLowerCase() === 'sms' &&\n          recoveryType?.toLowerCase() === 'password';\n      }\n    },\n    isUnauthenticated: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'UNAUTHENTICATED';\n      },\n    },\n    isMfaRejected: {\n      // MFA failures are usually error responses\n      // except in the case of Okta Push, when a\n      // user clicks 'deny' on his phone or OV app\n      // version is below a required version no.\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.factorResult === 'REJECTED';\n      },\n    },\n    isMfaTimeout: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.factorResult === 'TIMEOUT';\n      },\n    },\n    isMfaEnrollActivate: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'MFA_ENROLL_ACTIVATE' || res.status === 'FACTOR_ENROLL_ACTIVATE';\n      },\n    },\n    isWaitingForActivation: {\n      deps: ['isMfaEnrollActivate', 'lastAuthResponse'],\n      fn: function(isMfaEnrollActivate, res) {\n        return isMfaEnrollActivate && res.factorResult === 'WAITING';\n      },\n    },\n    isWaitingForNumberChallenge: {\n      deps: ['lastAuthResponse', 'isMfaChallenge'],\n      fn: function(res, isMfaChallenge) {\n        if (\n          isMfaChallenge &&\n          res &&\n          res.factorResult === 'WAITING' &&\n          res._embedded &&\n          res._embedded.factor &&\n          res._embedded.factor._embedded &&\n          res._embedded.factor._embedded.challenge\n        ) {\n          return true;\n        }\n        return false;\n      },\n    },\n    hasMultipleFactorsAvailable: {\n      deps: ['factors', 'isMfaRequired', 'isMfaChallenge', 'isUnauthenticated'],\n      fn: function(factors, isMfaRequired, isMfaChallenge, isUnauthenticated) {\n        if (!isMfaRequired && !isMfaChallenge && !isUnauthenticated) {\n          return false;\n        }\n        return factors && factors.length > 1;\n      },\n    },\n    promptForFactorInUnauthenticated: {\n      deps: ['lastAuthResponse', 'factors'],\n      fn: function(res, factors) {\n        if (res.status !== 'UNAUTHENTICATED') {\n          return false;\n        }\n        return factors && factors.length > 0;\n      },\n    },\n    userId: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded || !res._embedded.user) {\n          return null;\n        }\n        return res._embedded.user.id;\n      },\n    },\n    isIdxStateToken: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res && _.isString(res.stateToken) && res.stateToken.startsWith('01');\n      },\n    },\n    isPwdExpiringSoon: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.status === 'PASSWORD_WARN';\n      },\n    },\n    passwordExpireDays: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded || !res._embedded.policy || !res._embedded.policy.expiration) {\n          return null;\n        }\n        return res._embedded.policy.expiration.passwordExpireDays;\n      },\n    },\n    isPwdManagedByOkta: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._links || !res._links.next || !res._links.next.title) {\n          return true;\n        }\n        return false;\n      },\n    },\n    passwordExpiredWebsiteName: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._links || !res._links.next || !res._links.next.title) {\n          return null;\n        }\n        return res._links.next.title;\n      },\n    },\n    passwordExpiredLinkUrl: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._links || !res._links.next || !res._links.next.title || !res._links.next.href) {\n          return null;\n        }\n        return res._links.next.href;\n      },\n    },\n    recoveryType: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.recoveryType;\n      },\n    },\n    factorType: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.factorType;\n      },\n    },\n    factor: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded || !res._embedded.factor) {\n          return null;\n        }\n        return res._embedded.factor;\n      },\n    },\n    activatedFactorId: {\n      deps: ['factor'],\n      fn: function(factor) {\n        return factor ? factor.id : null;\n      },\n    },\n    activatedFactorType: {\n      deps: ['factor'],\n      fn: function(factor) {\n        return factor ? factor.factorType : null;\n      },\n    },\n    activatedFactorProvider: {\n      deps: ['factor'],\n      fn: function(factor) {\n        return factor ? factor.provider : null;\n      },\n    },\n    qrcode: {\n      deps: ['factor'],\n      fn: function(factor) {\n        try {\n          return factor._embedded.activation._links.qrcode.href;\n        } catch (err) {\n          return null;\n        }\n      },\n    },\n    activationSendLinks: {\n      deps: ['factor'],\n      fn: function(factor) {\n        let sendLinks;\n\n        try {\n          sendLinks = factor._embedded.activation._links.send;\n        } catch (err) {\n          sendLinks = [];\n        }\n        return sendLinks;\n      },\n    },\n    textActivationLinkUrl: {\n      deps: ['activationSendLinks'],\n      fn: function(activationSendLinks) {\n        const item = _.findWhere(activationSendLinks, { name: 'sms' });\n\n        return item ? item.href : null;\n      },\n    },\n    emailActivationLinkUrl: {\n      deps: ['activationSendLinks'],\n      fn: function(activationSendLinks) {\n        const item = _.findWhere(activationSendLinks, { name: 'email' });\n\n        return item ? item.href : null;\n      },\n    },\n    sharedSecret: {\n      deps: ['factor'],\n      fn: function(factor) {\n        try {\n          return factor._embedded.activation.sharedSecret;\n        } catch (err) {\n          return null;\n        }\n      },\n    },\n    duoEnrollActivation: {\n      deps: ['factor'],\n      fn: function(factor) {\n        if (!factor || !factor._embedded || !factor._embedded.activation) {\n          return null;\n        }\n        return factor._embedded.activation;\n      },\n    },\n    prevLink: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (res._links && res._links.prev) {\n          return res._links.prev.href;\n        }\n        return null;\n      },\n    },\n    skipLink: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (res._links && res._links.skip) {\n          return res._links.skip.href;\n        }\n        return null;\n      },\n    },\n    gracePeriodRemainingDays: {\n      deps: ['policy'],\n      fn: function(policy) {\n        if (policy && policy.gracePeriod && policy.gracePeriod.endDate) {\n          return getGracePeriodRemainingDays(policy.gracePeriod.endDate);\n        }\n        return null;\n      },\n    },\n    user: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded || !res._embedded.user) {\n          return null;\n        }\n        return res._embedded.user;\n      },\n    },\n    recoveryQuestion: {\n      deps: ['user'],\n      fn: function(user) {\n        if (!user || !user.recovery_question) {\n          return null;\n        }\n        return user.recovery_question.question;\n      },\n    },\n    userProfile: {\n      deps: ['user'],\n      fn: function(user) {\n        if (!user || !user.profile) {\n          return null;\n        }\n        return user.profile;\n      },\n    },\n    userConsentName: {\n      deps: ['userProfile', 'username'],\n      fn: function(userProfile, username) {\n        if (!userProfile || _.isEmpty(userProfile.firstName)) {\n          return username;\n        }\n        if (_.isEmpty(userProfile.lastName)) {\n          return userProfile.firstName;\n        }\n        return userProfile.firstName + ' ' + userProfile.lastName.charAt(0) + '.';\n      },\n    },\n    userEmail: {\n      deps: ['userProfile'],\n      fn: function(userProfile) {\n        if (!userProfile || !userProfile.login) {\n          return null;\n        }\n        return userProfile.login;\n      },\n    },\n    userFullName: {\n      deps: ['userProfile'],\n      fn: function(userProfile) {\n        if (!userProfile || (!userProfile.firstName && !userProfile.lastName)) {\n          return '';\n        }\n        return userProfile.firstName + ' ' + userProfile.lastName;\n      },\n    },\n    defaultAppLogo: {\n      deps: ['baseUrl'],\n      fn: function(baseUrl) {\n        return baseUrl + DEFAULT_APP_LOGO;\n      },\n    },\n    expiresAt: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.expiresAt;\n      },\n    },\n    target: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded) {\n          return null;\n        }\n        return res._embedded.target;\n      },\n    },\n    targetLabel: {\n      deps: ['target'],\n      fn: function(target) {\n        if (!target) {\n          return null;\n        }\n        return target.label;\n      },\n    },\n    targetLogo: {\n      deps: ['target'],\n      fn: function(target) {\n        if (!target || !target._links) {\n          return null;\n        }\n        return target._links.logo;\n      },\n    },\n    targetTermsOfService: {\n      deps: ['target'],\n      fn: function(target) {\n        if (!target || !target._links) {\n          return null;\n        }\n        return target._links['terms-of-service'];\n      },\n    },\n    targetPrivacyPolicy: {\n      deps: ['target'],\n      fn: function(target) {\n        if (!target || !target._links) {\n          return null;\n        }\n        return target._links['privacy-policy'];\n      },\n    },\n    targetClientURI: {\n      deps: ['target'],\n      fn: function(target) {\n        if (!target || !target._links) {\n          return null;\n        }\n        return target._links['client-uri'];\n      },\n    },\n    scopes: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded) {\n          return null;\n        }\n        return res._embedded.scopes;\n      },\n    },\n    issuer: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res?._embedded?.authentication?.issuer?.uri;\n      }\n    },\n    hasExistingPhones: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded || !res._embedded.factors) {\n          return false;\n        }\n        const factors = res._embedded.factors;\n\n        const factor = _.findWhere(factors, { factorType: 'sms', provider: 'OKTA' });\n\n        if (!factor || !factor._embedded) {\n          return false;\n        }\n\n        return !!factor._embedded.phones.length;\n      },\n    },\n    hasExistingPhonesForCall: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded || !res._embedded.factors) {\n          return false;\n        }\n        const factors = res._embedded.factors;\n\n        const factor = _.findWhere(factors, { factorType: 'call', provider: 'OKTA' });\n\n        if (!factor || !factor._embedded) {\n          return false;\n        }\n\n        return !!factor._embedded.phones.length;\n      },\n    },\n    isUndefinedUser: {\n      deps: ['securityImage'],\n      fn: function(securityImage) {\n        return securityImage === UNDEFINED_USER;\n      },\n    },\n    isNewUser: {\n      deps: ['securityImage'],\n      fn: function(securityImage) {\n        return securityImage === NEW_USER;\n      },\n    },\n    allowRememberDevice: {\n      deps: ['policy'],\n      fn: function(policy) {\n        return policy && policy.allowRememberDevice;\n      },\n    },\n    rememberDeviceLabel: {\n      deps: ['policy'],\n      fn: function(policy) {\n        if (policy && policy.rememberDeviceLifetimeInMinutes > 0) {\n          const timeString = getMinutesString(policy.rememberDeviceLifetimeInMinutes);\n\n          return loc('rememberDevice.timebased', 'login', [timeString]);\n        } else if (policy && policy.rememberDeviceLifetimeInMinutes === 0) {\n          return loc('rememberDevice.devicebased', 'login');\n        }\n        return loc('rememberDevice', 'login');\n      },\n    },\n    rememberDeviceByDefault: {\n      deps: ['policy'],\n      fn: function(policy) {\n        return policy && policy.rememberDeviceByDefault;\n      },\n    },\n    factorsPolicyInfo: {\n      deps: ['policy'],\n      fn: function(policy) {\n        return policy && policy.factorsPolicyInfo ? policy.factorsPolicyInfo : null;\n      },\n    },\n    verifyCustomFactorRedirectUrl: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._links || !res._links.next || res._links.next.name !== 'redirect' || !res._links.next.href) {\n          return null;\n        }\n        return res._links.next.href;\n      },\n    },\n    enrollCustomFactorRedirectUrl: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._links || !res._links.next || res._links.next.name !== 'activate' || !res._links.next.href) {\n          return null;\n        }\n        return res._links.next.href;\n      },\n    },\n    isFactorResultFailed: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res.factorResult === 'FAILED';\n      },\n    },\n    factorResultErrorMessage: {\n      deps: ['lastAuthResponse', 'isFactorResultFailed'],\n      fn: function(res, isFactorResultFailed) {\n        if (isFactorResultFailed) {\n          return res.factorResultMessage || loc('oform.error.unexpected', 'login');\n        }\n        return null;\n      },\n    },\n    deviceActivationStatus: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        if (!res._embedded) {\n          return null;\n        }\n        return res._embedded.deviceActivationStatus;\n      },\n    },\n    usingDeviceFlow: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return !!(res._embedded && res._embedded.usingDeviceFlow);\n      },\n    },\n    userCode: {\n      deps: ['lastAuthResponse'],\n      fn: function(res) {\n        return res?._embedded?.userCode;\n      },\n    },\n  },\n\n  parse: function(options) {\n    this.settings = options.settings;\n    return _.extend(_.omit(options, 'settings'), {\n      languageCode: this.settings.get('languageCode'),\n      userCountryCode: this.settings.get('countryCode'),\n    });\n  },\n});\n","const SUPPORTED_SOCIAL_IDPS = [\n  'facebook',\n  'google',\n  'linkedin',\n  'microsoft',\n  'apple',\n  'github',\n  'gitlab',\n  'yahoo',\n  'line',\n  'paypal',\n  'paypal_sandbox',\n  'salesforce',\n  'amazon',\n  'yahoojp',\n  'discord',\n  'adobe',\n  'orcid',\n  'spotify',\n  'xero',\n  'quickbooks',\n];\nexport default {\n  SUPPORTED_SOCIAL_IDPS,\n};\n","/* eslint max-statements: [2, 22],  complexity: [2, 12] */\n\n/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, Model, loc, internal, ModelProperty } from '@okta/courage';\nimport config from 'config/config.json';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Q from 'q';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport {\n  ConfigError,\n  UnsupportedBrowserError\n} from 'util/Errors';\nimport IDP from 'util/IDP';\nimport Logger from 'util/Logger';\nimport Util from 'util/Util';\nimport CountryUtil from 'util/CountryUtil';\nimport { OktaAuth } from '@okta/okta-auth-js';\nconst SharedUtil = internal.util.Util;\nconst assetBaseUrlTpl = hbs('https://global.oktacdn.com/okta-signin-widget/{{version}}');\n\nconst local: Record<string, ModelProperty> = {\n  authClient: ['object', false, undefined],\n  baseUrl: ['string', true],\n  recoveryToken: ['string', false, undefined],\n  stateToken: ['string', false, undefined],\n  username: ['string', false],\n  relayState: ['string', false],\n\n  // These two settings are aliases. Setting either value will set `backToSignInUri`\n  signOutLink: ['string', false], // for backward compatibility\n  backToSignInLink: ['string', false], // preferred setting\n\n  redirect: {\n    type: 'string',\n    values: ['never', 'always', 'auto'],\n    value: 'auto',\n  },\n\n  // allows bootstrapping the Widget into a specific view such\n  // as register or forgot password\n  flow: ['string', false, 'default'],\n\n  // Function to transform the username before passing it to the API\n  // for Primary Auth, Forgot Password and Unlock Account.\n  transformUsername: ['function', false],\n\n  // CALLBACKS\n  globalSuccessFn: 'function',\n  globalErrorFn: 'function',\n  processCreds: 'function',\n  hooks: 'object',\n\n  // IMAGES\n  logo: 'string',\n  logoText: ['string', false],\n  helpSupportNumber: 'string',\n\n  // <OIE>\n  // attribute to hold proxy (fake) idx response\n  // to render static pages without initiating idx pipeline\n  proxyIdxResponse: ['object', false],\n\n  // <OIE>\n  // By default, state handle will be saved to session storage\n  // and will be clear when terminal error or success redirect.\n  // Set this flag to true if you want to override this behavior.\n  // a.k.a dishonor the state handle stored in session storage.\n  overrideExistingStateToken: ['boolean', false, false],\n\n  // FEATURES\n  'features.router': ['boolean', true, false],\n  'features.securityImage': ['boolean', true, false],\n  'features.rememberMe': ['boolean', true, true],\n  'features.autoPush': ['boolean', true, false],\n  'features.smsRecovery': ['boolean', true, false],\n  'features.callRecovery': ['boolean', true, false],\n  'features.emailRecovery': ['boolean', false, true],\n  'features.webauthn': ['boolean', true, false],\n  'features.selfServiceUnlock': ['boolean', true, false],\n  'features.multiOptionalFactorEnroll': ['boolean', true, false],\n  'features.deviceFingerprinting': ['boolean', false, false],\n  'features.hideSignOutLinkInMFA': ['boolean', false, false],\n  'features.skipIdpFactorVerificationBtn': ['boolean', false, false],\n  'features.hideBackToSignInForReset': ['boolean', false, false],\n  'features.customExpiredPassword': ['boolean', true, false],\n  'features.registration': ['boolean', false, false],\n  'features.idpDiscovery': ['boolean', false, false],\n  'features.passwordlessAuth': ['boolean', false, false],\n  'features.showPasswordToggleOnSignInPage': ['boolean', false, false],\n  'features.trackTypingPattern': ['boolean', false, false],\n  'features.redirectByFormSubmit': ['boolean', false, false],\n  'features.useDeviceFingerprintForSecurityImage': ['boolean', false, true],\n  'features.showPasswordRequirementsAsHtmlList': ['boolean', false, false],\n  'features.mfaOnlyFlow': ['boolean', false, false],\n  'features.scrollOnError': ['boolean', false, true],\n  'features.showKeepMeSignedIn': ['boolean', false, true],\n  'features.showIdentifier': ['boolean', false, true],\n  'features.autoFocus': ['boolean', false, true],\n  'features.showSessionRevocation': ['boolean', false, false],\n  'features.disableAutocomplete': ['boolean', false, false],\n\n  defaultCountryCode: ['string', false, 'US'],\n\n  // I18N\n  language: ['any', false], // Can be a string or a function\n  i18n: ['object', false],\n\n  // ASSETS\n  'assets.baseUrl': ['string', false],\n  'assets.rewrite': {\n    type: 'function',\n    value: _.identity,\n  },\n  'assets.languages': ['array', false],\n\n  // OAUTH2\n  issuer: 'string',\n  clientId: 'string',\n  redirectUri: 'string',\n  state: 'string',\n  nonce: 'string',\n  scopes: 'array',\n  codeChallenge: 'string',\n  codeChallengeMethod: ['string', false],\n  oAuthTimeout: ['number', false],\n\n  authScheme: ['string', false, 'OAUTH2'],\n\n  // External IdPs\n  idps: ['array', false, []],\n  idpDisplay: {\n    type: 'string',\n    values: ['PRIMARY', 'SECONDARY'],\n    value: 'SECONDARY',\n  },\n\n  // HELP LINKS\n  'helpLinks.help': 'string',\n  'helpLinks.forgotPassword': 'string',\n  'helpLinks.unlock': 'string',\n  'helpLinks.custom': 'array',\n  'helpLinks.factorPage.href': 'string',\n  'helpLinks.factorPage.text': 'string',\n\n  //Custom Buttons\n  customButtons: ['array', false, []],\n\n  //Registration\n  policyId: 'string',\n  'registration.click': 'function',\n  'registration.parseSchema': 'function',\n  'registration.preSubmit': 'function',\n  'registration.postSubmit': 'function',\n\n  //Consent\n  'consent.cancel': 'function',\n\n  //IDP Discovery\n  'idpDiscovery.requestContext': 'string',\n\n  //Colors\n  'colors.brand': 'string',\n\n  //cspNonce\n  'cspNonce': 'string',\n\n  //Descriptions\n  brandName: 'string',\n\n  //PIV\n  piv: ['object', false, {}],\n\n  //Email verify callback\n  otp: 'string',\n\n  //Support classic engine\n  useClassicEngine: ['boolean', false, false]\n};\n\nconst derived: Record<string, ModelProperty>  = {\n  backToSignInUri: {\n    deps: ['backToSignInLink', 'signOutLink'],\n    fn: function(backToSignInLink, signOutLink) {\n      return backToSignInLink || signOutLink; // prefer backToSignInLink over signOutLink, but they are aliases\n    }\n  },\n  showPasswordToggle: {\n    deps: ['features.showPasswordToggleOnSignInPage'],\n    fn: function() {\n      // showPasswordToggle is for OIE only.\n      // Used to default showPasswordToggleOnSignInPage to true.\n      const defaultValue = true;\n      const customizedValue = this.options?.features?.showPasswordToggleOnSignInPage ??\n        this.options?.['features.showPasswordToggleOnSignInPage'];\n      return customizedValue ?? defaultValue;\n    },\n    cache: true,\n  },\n  redirectUtilFn: {\n    deps: ['features.redirectByFormSubmit'],\n    fn: function(redirectByFormSubmit) {\n      return redirectByFormSubmit ? Util.redirectWithFormGet.bind(Util) : SharedUtil.redirect.bind(SharedUtil);\n    },\n    cache: true,\n  },\n  supportedLanguages: {\n    deps: ['i18n', 'language', 'assets.languages'],\n    fn: function(i18n, language, hostedLanguages) {\n      // By default, the language be automatically detected from the browser\n      // Developers can specify the language. It will be added to the supportedLanguages list.\n      // Developers can also provide a list of languages with hosted assets, these replace the default list\n      const supportedLanguages = hostedLanguages || config.supportedLanguages;\n      return _.union(\n        supportedLanguages,\n        _.keys(i18n),\n        _.isString(language) ? [language] : []\n      );\n    },\n    cache: true,\n  },\n  languageCode: {\n    deps: ['language', 'supportedLanguages'],\n    fn: function(language, supportedLanguages) {\n      const userLanguages = BrowserFeatures.getUserLanguages();\n\n      // TODO: revisit this fix - OKTA-491150\n      userLanguages.forEach((val, idx) => {\n        if (val === 'nl') {\n          userLanguages[idx] = 'nl-NL';\n        }\n        else if (val === 'pt') {\n          userLanguages[idx] = 'pt-BR';\n        }\n      });\n\n      const preferred = _.clone(userLanguages);\n\n      const supportedLowerCase = Util.toLower(supportedLanguages);\n\n      // Any developer defined \"language\" takes highest priority:\n      // As a string, i.e. 'en', 'ja', 'zh-CN'\n      if (_.isString(language)) {\n        preferred.unshift(language);\n      } else if (_.isFunction(language)) {\n        // As a callback function, which is passed the list of supported\n        // languages and detected user languages. This function must return\n        // a languageCode, i.e. 'en', 'ja', 'zh-CN'\n        preferred.unshift(language(supportedLanguages, userLanguages));\n      }\n\n      // Add default language, and expand to include any language\n      // codes that do not include region, dialect, etc.\n      preferred.push(config.defaultLanguage);\n      const expanded = Util.toLower(Util.expandLanguages(preferred));\n\n      // Perform a case insensitive search - this is necessary in the case\n      // of browsers like Safari\n      let i;\n      let supportedPos;\n\n      for (i = 0; i < expanded.length; i++) {\n        supportedPos = supportedLowerCase.indexOf(expanded[i]);\n        if (supportedPos > -1) {\n          return supportedLanguages[supportedPos];\n        }\n      }\n    },\n  },\n  countryCode: {\n    deps: ['defaultCountryCode'],\n    fn: function(defaultCountryCode) {\n      const countries = CountryUtil.getCountries();\n      return Object.keys(countries).includes(defaultCountryCode)\n        ? defaultCountryCode : 'US';\n    },\n  },\n  mode: {\n    deps: ['codeChallenge'],\n    fn: function(codeChallenge) {\n      if (codeChallenge) {\n        return 'remediation';\n      }\n      return 'relying-party';\n    }\n  },\n  oauth2Enabled: {\n    deps: ['clientId', 'authScheme', 'authClient'],\n    fn: function(clientId, authScheme, authClient) {\n       if (!clientId && authClient) {\n        clientId = authClient.options.clientId;\n      }\n      return (!!clientId) && authScheme.toLowerCase() === 'oauth2';\n    },\n    cache: true,\n  },\n  // Redirect Uri to provide in the oauth API\n  oauthRedirectUri: {\n    deps: ['redirectUri'],\n    fn: function(redirectUri) {\n      if (redirectUri) {\n        return redirectUri;\n      }\n\n      let origin = window.location.origin;\n\n      // IE8\n      if (!origin) {\n        const href = window.location.href;\n        const path = window.location.pathname;\n\n        if (path !== '') {\n          origin = href.substring(0, href.lastIndexOf(path));\n        }\n      }\n\n      return encodeURI(origin);\n    },\n  },\n  // Adjusts the idps passed into the widget based on if they get explicit support\n  configuredSocialIdps: {\n    deps: ['idps'],\n    fn: function(idps) {\n      return _.map(idps, function(idpConfig) {\n        const idp = _.clone(idpConfig);\n\n        let type = idp.type && idp.type.toLowerCase();\n\n        if (!(type && _.contains(IDP.SUPPORTED_SOCIAL_IDPS, type))) {\n          type = 'general-idp';\n          idp.text = idp.text || '{ Please provide a text value }';\n        }\n\n        idp.className = [\n          'social-auth-button',\n          'social-auth-' + type + '-button ',\n          idp.className ? idp.className : '',\n        ].join(' ');\n        idp.dataAttr = 'social-auth-' + type + '-button';\n        idp.i18nKey = 'socialauth.' + type + '.label';\n        return idp;\n      });\n    },\n    cache: true,\n  },\n  // Can support piv authentication\n  hasPivCard: {\n    deps: ['piv'],\n    fn: function(piv) {\n      return piv && piv.certAuthUrl;\n    },\n    cache: true,\n  },\n  // social auth buttons order - 'above'/'below' the primary auth form (boolean)\n  socialAuthPositionTop: {\n    deps: ['configuredSocialIdps', 'hasPivCard', 'idpDisplay'],\n    fn: function(configuredSocialIdps, hasPivCard, idpDisplay) {\n      return (!_.isEmpty(configuredSocialIdps) || hasPivCard) && idpDisplay.toUpperCase() === 'PRIMARY';\n    },\n    cache: true,\n  },\n  hasConfiguredButtons: {\n    deps: ['configuredSocialIdps', 'customButtons', 'hasPivCard'],\n    fn: function(configuredSocialIdps, customButtons, hasPivCard) {\n      return !_.isEmpty(configuredSocialIdps) || !_.isEmpty(customButtons) || hasPivCard;\n    },\n    cache: true,\n  }\n};\n\ntype SettingsProps = typeof local & typeof derived;\n\nexport default class Settings extends Model {\n  authClient:OktaAuth;\n\n  constructor(attributes, options) {\n    // base class constructor will call preinitialize() and initialize() and compute derived properties\n    super(attributes, options);\n\n    // apply languageCode\n    const authClient = this.getAuthClient();\n    this.setAcceptLanguageHeader(authClient);\n  }\n\n  get<A extends Backbone._StringKey<SettingsProps>>(attributeName: A): any {\n    return Model.prototype.get.call(this, attributeName);\n  }\n\n  preinitialize(...args) {\n    this.local = local;\n    this.derived = derived;\n    Model.prototype.preinitialize.apply(this, args);\n  }\n\n  initialize(options) {\n    options = options || {};\n    const { colors, authClient, flow } = options;\n    let { baseUrl } = options;\n\n    if (!baseUrl) {\n      // infer baseUrl from the issuer\n      // favor authClient API first\n      if (authClient) {\n        baseUrl = authClient.getIssuerOrigin();\n      } else {\n        // issuer can also be passed a top-level option or exist in authParams\n        const { authParams } = options;\n        let { issuer } = options;\n        issuer = issuer || authParams?.issuer;\n        baseUrl = issuer?.split('/oauth2/')[0];\n      }\n      this.set('baseUrl', baseUrl);\n    }\n\n    // If `flow` and `authClient` instance are passed to settings, set flow in auth client\n    if (authClient && flow) {\n      authClient.idx.setFlow(flow);\n    }\n\n    if (!baseUrl) {\n      this.callGlobalError(new ConfigError(loc('error.required.baseUrl')));\n    } else if (colors && _.isString(colors.brand) && !colors.brand.match(/^#[0-9A-Fa-f]{6}$/)) {\n      this.callGlobalError(new ConfigError(loc('error.invalid.colors.brand')));\n    } else if (BrowserFeatures.corsIsNotSupported()) {\n      this.callGlobalError(new UnsupportedBrowserError(loc('error.unsupported.cors')));\n    }\n  }\n\n  setAcceptLanguageHeader(authClient) {\n    if (authClient) {\n      authClient.http.setRequestHeader('Accept-Language', this.get('languageCode'));\n    }\n  }\n\n  setAuthClient(authClient) {\n    this.set('authClient', authClient);\n    this.setAcceptLanguageHeader(authClient);\n  }\n\n  getAuthClient() {\n    return this.get('authClient');\n  }\n\n  set(...args: any[]) {\n    try {\n      return Model.prototype.set.apply(this, args);\n    } catch (e) {\n      const message = e.message ? e.message : e;\n\n      this.callGlobalError(new ConfigError(message));\n    }\n  }\n\n  // Invokes the global success function. This should only be called on a\n  // terminal part of the code (i.e. authStatus SUCCESS or after sending\n  // a recovery email)\n  callGlobalSuccess(status, data) {\n    const res = _.extend(data, { status: status });\n    // Defer this to ensure that our functions have rendered completely\n    // before invoking their function\n\n    _.defer(_.partial(this.get('globalSuccessFn'), res));\n  }\n\n  // Invokes the global error function. This should only be called on non\n  // recoverable errors (i.e. configuration errors, browser unsupported\n  // errors, etc)\n  callGlobalError(err) {\n    const globalErrorFn = this.get('globalErrorFn') || this.options.globalErrorFn;\n    // Note: Must use \"this.options.globalErrorFn\" when they've passed invalid\n    // arguments - globalErrorFn will not have been set yet\n\n    if (globalErrorFn) {\n      globalErrorFn(err);\n    } else {\n      // Only throw the error if they have not registered a globalErrorFn\n      throw err;\n    }\n  }\n\n  // Get the username by applying the transform function if it exists.\n  transformUsername(username, operation) {\n    const transformFn = this.get('transformUsername');\n\n    if (transformFn && _.isFunction(transformFn)) {\n      return transformFn(username, operation);\n    }\n    return username;\n  }\n\n  processCreds(creds) {\n    const processCreds = this.get('processCreds');\n\n    return Q.Promise(function(resolve) {\n      if (!_.isFunction(processCreds)) {\n        resolve();\n      } else if (processCreds.length === 2) {\n        processCreds(creds, resolve);\n      } else {\n        processCreds(creds);\n        resolve();\n      }\n    });\n  }\n\n  parseRegistrationSchema(schema, onSuccess, onFailure) {\n    const parseSchema = this.get('registration.parseSchema');\n\n    //check for parseSchema callback\n    if (_.isFunction(parseSchema)) {\n      parseSchema(\n        schema,\n        function(schema) {\n          onSuccess(schema);\n        },\n        function(error) {\n          error = error || { errorSummary: loc('registration.default.callbackhook.error') };\n          error['callback'] = 'parseSchema';\n          onFailure(error);\n        }\n      );\n    } else {\n      //no callback\n      onSuccess(schema);\n    }\n  }\n\n  preRegistrationSubmit(postData, onSuccess, onFailure) {\n    const preSubmit = this.get('registration.preSubmit');\n\n    //check for preSubmit callback\n    if (_.isFunction(preSubmit)) {\n      preSubmit(\n        postData,\n        function(postData) {\n          onSuccess(postData);\n        },\n        function(error) {\n          error = error || { errorSummary: loc('registration.default.callbackhook.error') };\n          error['callback'] = 'preSubmit';\n          onFailure(error);\n        }\n      );\n    } else {\n      //no callback\n      onSuccess(postData);\n    }\n  }\n\n  postRegistrationSubmit(response, onSuccess, onFailure) {\n    const postSubmit = this.get('registration.postSubmit');\n\n    //check for postSubmit callback\n    if (_.isFunction(postSubmit)) {\n      postSubmit(\n        response,\n        function(response) {\n          onSuccess(response);\n        },\n        function(error) {\n          error = error || { errorSummary: loc('registration.default.callbackhook.error') };\n          error['callback'] = 'postSubmit';\n          onFailure(error);\n        }\n      );\n    } else {\n      //no callback\n      onSuccess(response);\n    }\n  }\n\n  // Use the parse function to transform config options to the standard\n  // settings we currently support. This is a good place to deprecate old\n  // option formats.\n  parse(options) {\n    if (options.labels || options.country) {\n      Logger.deprecate('Use \"i18n\" instead of \"labels\" and \"country\"');\n      const overrides = options.labels || {};\n\n      _.each(options.country, function(val, key) {\n        overrides['country.' + key] = val;\n      });\n      // Old behavior is to treat the override as a global override, so we\n      // need to add these overrides to each language\n      options.i18n = {};\n      _.each(config.supportedLanguages, function(language) {\n        options.i18n[language] = overrides;\n      });\n      delete options.labels;\n      delete options.country;\n    }\n\n    // Default the assets.baseUrl to the cdn, or remove any trailing slashes\n    if (!options.assets) {\n      options.assets = {};\n    }\n    const abu = options.assets.baseUrl;\n\n    if (!abu) {\n      options.assets.baseUrl = assetBaseUrlTpl({ version: config.version });\n    } else if (abu[abu.length - 1] === '/') {\n      options.assets.baseUrl = abu.substring(0, abu.length - 1);\n    }\n\n    return options;\n  }\n\n  isDsTheme() {\n    return false;\n  }\n\n}\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport Enums from 'util/Enums';\nconst CAN_REMOVE_BEACON_CLS = 'can-remove-beacon';\nexport default View.extend({\n  tagName: 'main',\n  className: 'auth-container main-container',\n  id: Enums.WIDGET_CONTAINER_ID,\n  attributes: { 'data-se': 'auth-container', tabindex: '-1' },\n  initialize: function(options) {\n    this.listenTo(options.appState, 'change:beaconType', function(model, type) {\n      this.$el.toggleClass(CAN_REMOVE_BEACON_CLS, type === 'security');\n    });\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-statements: [2, 16] */\n\nimport Q from 'q';\nimport Enums from './Enums';\nconst SWAP_PAGE_TIME = 200;\nconst fn = {};\n\nfunction zoom($el, start, finish) {\n  const deferred = Q.defer();\n\n  $el.animate(\n    {\n      'text-indent': 1,\n    },\n    {\n      duration: 200,\n      easing: 'swing',\n      step: function(now, fx) {\n        fx.start = start;\n        fx.end = finish;\n        $el.css('transform', 'scale(' + now + ', ' + now + ')');\n      },\n      always: function() {\n        deferred.resolve($el);\n      },\n    }\n  );\n  return deferred.promise;\n}\n\nfunction rotate($el, start, finish) {\n  const deferred = Q.defer();\n\n  $el.animate(\n    {\n      'text-indent': 1,\n    },\n    {\n      duration: 150,\n      easing: 'swing',\n      step: function(now, fx) {\n        fx.start = start;\n        fx.end = finish;\n        $el.css('transform', 'rotate(' + now + 'deg)');\n      },\n      always: function() {\n        deferred.resolve($el);\n      },\n    }\n  );\n  return deferred.promise;\n}\n\n// Note: It is necessary to pass in a success callback because we must\n// remove the old dom node (and controller) in the same tick of the event\n// loop. Waiting for \"then\" results in a glitchy animation.\nfn.swapPages = function(options) {\n  const deferred = Q.defer();\n  const $parent = options.$parent;\n  const $oldRoot = options.$oldRoot;\n  const $newRoot = options.$newRoot;\n  const success = options.success;\n  const ctx = options.ctx;\n  let directionClassName = 'transition-from-right';\n\n  if (options.dir && options.dir === Enums.DIRECTION_BACK) {\n    directionClassName = 'transition-from-left';\n  }\n\n  $newRoot.addClass(directionClassName);\n  $parent.append($newRoot);\n\n  $parent.addClass('animation-container-overflow');\n  const newRootAnimations = { left: '0px', top: '0px', opacity: 1 };\n  $newRoot.animate(newRootAnimations, SWAP_PAGE_TIME, function() {\n    $parent.removeClass('animation-container-overflow');\n    $newRoot.removeClass(directionClassName);\n    const clearStyles = Object.keys(newRootAnimations).reduce((styles, attr) => ({ ...styles, [attr]: '' }), {});\n    $newRoot.css(clearStyles);\n    success.call(ctx);\n    deferred.resolve();\n  });\n\n  $oldRoot.animate({ height: $newRoot.height(), opacity: 0 }, SWAP_PAGE_TIME * 0.8);\n\n  return deferred.promise;\n};\n\nfn.swapBeacons = function(options) {\n  const $el = options.$el;\n  const swap = options.swap;\n  const ctx = options.ctx;\n\n  return this.implode($el)\n    .then(function() {\n      swap.call(ctx);\n      return $el;\n    })\n    .then(this.explode);\n};\n\nfn.explode = function($el) {\n  return zoom($el, 0, 1); //zoom in\n};\n\nfn.implode = function($el) {\n  return zoom($el, 1, 0); //zoom out\n};\n\nfn.radialProgressBar = function(options) {\n  const radialProgressBar = options.$el;\n  const swap = options.swap;\n  const circles = radialProgressBar.children();\n\n  return rotate(circles, 0, 180)\n    .then(function() {\n      radialProgressBar.css({ clip: 'auto' });\n    })\n    .then(function() {\n      const leftHalf = circles.eq(0);\n\n      swap();\n      return rotate(leftHalf, 180, 360);\n    })\n    .then(function() {\n      //reset values to initial state\n      radialProgressBar.css({ clip: 'rect(0px, 96px, 96px, 48px)' });\n      circles.css({\n        transform: 'rotate(0deg)',\n        'text-indent': '1px',\n      });\n    });\n};\n\nexport default fn;\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nexport default View.extend({\n  template: hbs(\n    '\\\n      <div class=\"beacon-blank\"></div>\\\n      <div class=\"bg-helper auth-beacon auth-beacon-security\" data-se=\"loading-beacon\">\\\n      <div class=\"okta-sign-in-beacon-border auth-beacon-border js-auth-beacon-border\"></div>\\\n      </div>\\\n    '\n  ),\n\n  equals: function(Beacon) {\n    return Beacon && this instanceof Beacon;\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Animations from 'util/Animations';\nimport LoadingBeacon from 'v1/views/shared/LoadingBeacon';\nconst NO_BEACON_CLS = 'no-beacon';\nconst LOADING_BEACON_CLS = 'beacon-small beacon-loading';\n\nfunction isLoadingBeacon(beacon) {\n  return beacon && beacon.equals(LoadingBeacon);\n}\n\nfunction removeBeacon(view) {\n  // There are some timing issues with removing beacons (i.e. the case of\n  // transitioning from loadingBeacon -> loadingBeacon)\n  if (!view.currentBeacon) {\n    return;\n  }\n  view.currentBeacon.remove();\n  view.currentBeacon = null;\n}\n\nfunction addBeacon(view, NextBeacon, selector, options) {\n  view.add(NextBeacon, {\n    selector: selector,\n    options: options,\n  });\n  view.currentBeacon = view.first();\n}\n\nfunction typeOfTransition(currentBeacon, NextBeacon, options) {\n  if (!currentBeacon && !NextBeacon) {\n    return 'none';\n  }\n  // Show Loading beacon\n  if (!currentBeacon && options.loading) {\n    return 'load';\n  }\n  // Swap/Hide Loading beacon\n  if (currentBeacon && isLoadingBeacon(currentBeacon)) {\n    return NextBeacon ? 'swap' : 'unload';\n  }\n  if (currentBeacon && currentBeacon.equals(NextBeacon, options)) {\n    return 'same';\n  }\n  if (!currentBeacon && NextBeacon) {\n    return 'add';\n  }\n  if (currentBeacon && !NextBeacon) {\n    return 'remove';\n  }\n  if (currentBeacon instanceof NextBeacon) {\n    return 'fade';\n  }\n  // If none of the above\n  // then we are changing the type of beacon\n  // ex. from SecurityBeacon to FactorBeacon\n  return 'swap';\n}\n\nexport default class Header extends View {\n  currentBeacon;\n  \n  preinitialize(...args) {\n    this.currentBeacon = null;\n    /* eslint-disable @okta/okta/no-unlocalized-text-in-templates */\n    this.template = hbs(\n      '\\\n        <div class=\"okta-sign-in-header auth-header\">\\\n          {{#if logo}}\\\n          <h1><img src=\"{{logo}}\" class=\"auth-org-logo\" alt=\"{{logoText}} logo\" aria-label=\"{{logoText}} logo\"></h1>\\\n          {{/if}}\\\n          <div data-type=\"beacon-container\" class=\"beacon-container\"></div>\\\n        </div>\\\n        <div class=\"auth-content\"><div class=\"auth-content-inner\"></div></div>\\\n      '\n    );\n    /* eslint-enable @okta/okta/no-unlocalized-text-in-templates */\n    View.prototype.preinitialize.apply(this, args);\n  }\n\n\n  // Attach a 'no-beacon' class if the security image feature\n  // is not passed in to prevent the beacon from jumping.\n  initialize(options) {\n    if (!options.settings.get('features.securityImage')) {\n      this.$el.addClass(NO_BEACON_CLS);\n      // To show/hide the spinner when there is no security image,\n      // listen to the appState's loading/removeLoading events.\n      this.listenTo(options.appState, 'loading', this.setLoadingBeacon);\n      this.listenTo(options.appState, 'removeLoading', this.removeLoadingBeacon);\n    }\n  }\n\n  /* eslint complexity: 0 */\n  setBeacon(NextBeacon, options) {\n    const selector = '[data-type=\"beacon-container\"]';\n    const container = this.$(selector);\n    const transition = typeOfTransition(this.currentBeacon, NextBeacon, options);\n\n    switch (transition) {\n    case 'none':\n      this.$el.addClass(NO_BEACON_CLS);\n      return;\n    case 'same':\n      return;\n    case 'add':\n      this.$el.removeClass(NO_BEACON_CLS);\n      addBeacon(this, NextBeacon, selector, options);\n      return Animations.explode(container);\n    case 'remove':\n      this.$el.addClass(NO_BEACON_CLS);\n      return Animations.implode(container)\n        .then(() => {\n          removeBeacon(this);\n        })\n        .done(); // TODO: can this be removed if Animations.implode returns standard ES6 Promise?\n    case 'fade':\n      // Other transitions are performed on the beacon container,\n      // but this transition is on the content inside the beacon.\n      // For a SecurityBeacon the username change will update the\n      // AppState and trigger an transition to a new Becon\n      // Since there is no url change this method is not called.\n      // For a FactorBeacon a page refresh has occurred\n      // so we execute the beacon's own transition method.\n      if (!this.currentBeacon.fadeOut) {\n        throw new Error('The current beacon is missing the \"fadeOut\" method');\n      }\n      options.animate = true;\n      return this.currentBeacon\n        .fadeOut()\n        .then(() => {\n          removeBeacon(this);\n          addBeacon(this, NextBeacon, selector, options);\n        })\n        .done(); // TODO: can this be removed if fadeOut returns standard ES6 Promise?\n    case 'swap':\n      return Animations.swapBeacons({\n        $el: container,\n        swap: () => {\n          const isLoading = isLoadingBeacon(this.currentBeacon);\n\n          // Order of these calls is important for -\n          // loader --> security/factor beacon swap.\n          removeBeacon(this);\n          if (isLoading) {\n            container.removeClass(LOADING_BEACON_CLS);\n            this.$el.removeClass(NO_BEACON_CLS);\n          }\n          addBeacon(this, NextBeacon, selector, options);\n        },\n      }).done(); // TODO: can this be removed if Animations.swapBeacons returns standard ES6 Promise?\n    case 'load':\n      // Show the loading beacon. Add a couple of classes\n      // before triggering the add beacon code.\n      container.addClass(LOADING_BEACON_CLS);\n      addBeacon(this, NextBeacon, selector, options);\n      return Animations.explode(container);\n    case 'unload':\n      // Hide the loading beacon.\n      return this.removeLoadingBeacon();\n    default:\n      throw new Error('the \"' + transition + '\" is not recognized');\n    }\n  }\n\n  // Show the loading beacon when the security image feature is not enabled.\n  setLoadingBeacon(isLoading) {\n    if (!isLoading || isLoadingBeacon(this.currentBeacon)) {\n      return;\n    }\n    this.setBeacon(LoadingBeacon, { loading: true });\n  }\n\n  // Hide the beacon on primary auth failure. On primary auth success, setBeacon does this job.\n  removeLoadingBeacon() {\n    const container = this.$('[data-type=\"beacon-container\"]');\n\n    return Animations.implode(container)\n      .then(() => {\n        removeBeacon(this);\n        container.removeClass(LOADING_BEACON_CLS);\n      })\n      .done(); // TODO: can this be removed if Animations.implode returns standard ES6 Promise?\n  }\n\n  getTemplateData() {\n    return this.settings.toJSON({ verbose: true });\n  }\n\n  getContentEl() {\n    return this.$('.auth-content-inner');\n  }\n}\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, $, loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Animations from 'util/Animations';\n\nfunction setBackgroundImage(el, appState) {\n  const imgSrc = appState.get('securityImage');\n  const imgDescription = appState.get('securityImageDescription');\n  const isUndefinedUser = appState.get('isUndefinedUser');\n  const isNewUser = appState.get('isNewUser');\n  const isSecurityImage = !isUndefinedUser && !isNewUser;\n  // NOTE: The imgSrc is returned by the server so that every\n  // user has a unique image. However new and undefined user states\n  // are hard coded into the css and the value returned by the server\n  // is ignored.\n\n  el.css('background-image', '');\n  el.removeClass('new-user undefined-user');\n  if (isNewUser) {\n    el.addClass('new-user');\n    return;\n  }\n  if (isUndefinedUser) {\n    el.addClass('undefined-user');\n    return;\n  }\n  if (isSecurityImage) {\n    // TODO: Newer versions of qtip will remove aria-describedby on their own when destroy() is called.\n    el.removeAttr('aria-describedby');\n    el.find('.accessibility-text').text(imgDescription);\n    el.css('background-image', 'url(' + _.escape(imgSrc) + ')');\n    return;\n  }\n}\n\nfunction antiPhishingMessage(image, host) {\n  $(window).on(\n    'resize.securityBeaconQtip',\n    _.debounce(function() {\n      if (image.is(':visible')) {\n        image.qtip('show');\n      }\n    }, 300)\n  );\n\n  // Show the message that the user has not logged in from this device before.\n  image.qtip({\n    prerender: true,\n    content: {\n      text: loc('primaryauth.newUser.tooltip', 'login', [_.escape(host)]),\n      button: loc('primaryauth.newUser.tooltip.close', 'login'),\n    },\n    style: {\n      classes: 'okta-security-image-tooltip security-image-qtip qtip-custom qtip-shadow qtip-rounded',\n      tip: { height: 12, width: 16 },\n    },\n    position: {\n      my: 'top center',\n      at: 'center',\n      target: $('.auth-beacon-security'),\n      adjust: { method: 'flip', scroll: false, resize: true },\n      effect: false,\n    },\n    hide: { event: false, fixed: true },\n    show: { event: false, delay: 200 },\n    events: {\n      move: function(event, api) {\n        if (!api.elements.target.is(':visible')) {\n          // Have to hide it immediately, with no effect\n          api.set('hide.effect', false);\n          api.hide();\n          api.set('hide.effect', true);\n        }\n      },\n    },\n  });\n\n  // It is necessary to delay toggle to the next render cycle, since qtip internally defers some setup tasks.\n  setTimeout(() => {\n    image.qtip('toggle', image.is(':visible'));\n  }, 0);\n}\n\nfunction destroyAntiPhishingMessage(image) {\n  image.qtip('destroy');\n  $(window).off('resize.securityBeaconQtip');\n}\n\nasync function updateSecurityImage($el, appState, animate) {\n  const image = $el.find('.auth-beacon-security');\n  const border = $el.find('.js-auth-beacon-border');\n  const hasBorder = !appState.get('isUndefinedUser');\n  const hasAntiPhishing = appState.get('isNewUser');\n  const radialProgressBar = $el.find('.radial-progress-bar');\n  const host = appState.get('baseUrl').match(/https?:\\/\\/(.[^/]+)/)[1];\n  const duration = 200;\n\n  if (!animate) {\n    // Do not animate the security beacon\n    // This occurs when initializing the form\n    setBackgroundImage(image, appState);\n    border.toggleClass('auth-beacon-border', hasBorder);\n    return;\n  }\n\n  destroyAntiPhishingMessage(image);\n\n  // Animate loading the security beacon\n  if (!hasBorder) {\n    // This occurs when appState username is blank\n    // we do not yet know if the user is recognized\n    image.fadeOut(duration, function() {\n      setBackgroundImage(image, appState);\n      border.removeClass('auth-beacon-border');\n      image.fadeIn(duration);\n    });\n  } else {\n    // Animate loading the security beacon with a loading bar for the border\n    // This occurs when the username has been checked against Okta.\n    border.removeClass('auth-beacon-border');\n    await Animations.radialProgressBar({\n      $el: radialProgressBar,\n      swap() {\n        image.fadeOut(duration, () => {\n          setBackgroundImage(image, appState);\n          image.fadeIn(duration);\n        });\n      },\n    });\n    border.addClass('auth-beacon-border');\n    if (hasAntiPhishing) {\n      antiPhishingMessage(image, host);\n    }\n  }\n}\n\nexport default View.extend({\n  template: hbs(\n    '\\\n    <div class=\"beacon-blank\">\\\n      <div class=\"radial-progress-bar\">\\\n        <div class=\"circle left\"></div>\\\n        <div class=\"circle right\"></div>\\\n      </div>\\\n    </div>\\\n    <div aria-live=\"polite\" role=\"img\" class=\"bg-helper auth-beacon auth-beacon-security\" data-se=\"security-beacon\">\\\n      <span class=\"accessibility-text\"></span>\\\n      <div class=\"okta-sign-in-beacon-border auth-beacon-border js-auth-beacon-border\">\\\n      </div>\\\n    </div>\\\n    '\n  ),\n  className: 'js-security-beacon',\n\n  initialize: function(options) {\n    this.update = _.partial(updateSecurityImage, this.$el, options.appState);\n    this.listenTo(options.appState, 'change:securityImage', this.update);\n    this.listenTo(options.appState, 'loading', function(isLoading) {\n      this.$el.toggleClass('beacon-loading', isLoading);\n      this.removeAntiPhishingMessage();\n    });\n    this.options.appState.set('beaconType', 'security');\n\n    this.listenTo(options.appState, 'navigate', this.removeAntiPhishingMessage);\n  },\n\n  postRender: function() {\n    this.update(false);\n  },\n\n  equals: function(Beacon) {\n    return Beacon && this instanceof Beacon;\n  },\n\n  removeAntiPhishingMessage: function() {\n    const image = this.$el.find('.auth-beacon-security');\n\n    image.qtip('destroy');\n  },\n});\n","/*!\n * Copyright (c) 2018-Present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport Enums from 'util/Enums';\nconst fn = {};\n\nconst template = function(colors) {\n  return `\n#okta-sign-in.auth-container .button-primary,\n#okta-sign-in.auth-container .button-primary:active,\n#okta-sign-in.auth-container .button-primary:focus { background: ${colors.brand}; }\n#okta-sign-in.auth-container .button-primary:hover { background: ${fn.lighten(colors.brand, 0.05)}; }\n#okta-sign-in.auth-container .button.button-primary.link-button-disabled {\n  background: ${colors.brand};\n  opacity: 0.5;\n}\n    `;\n};\n\n// visible for testing\nfn.lighten = function(hex, lum) {\n  lum = lum || 0;\n  hex = hex.substr(1);\n  let newHex = '#';\n\n  for (var i = 0; i < 3; i++) {\n    let c = parseInt(hex.substr(i * 2, 2), 16);\n\n    c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);\n    newHex += ('00' + c).substr(c.length);\n  }\n  return newHex;\n};\n\nfn.addStyle = function(colors, cspNonce) {\n  const css = template(colors);\n  const main = document.getElementById(Enums.WIDGET_CONTAINER_ID);\n  const style = document.createElement('style');\n\n  style.id = Enums.WIDGET_CONFIG_COLORS_ID;\n  style.type = 'text/css';\n  if (cspNonce) {\n    style.nonce = cspNonce;\n  }\n  style.appendChild(document.createTextNode(css));\n\n  main.appendChild(style);\n};\n\nfn.isLoaded = function() {\n  return !!document.getElementById(Enums.WIDGET_CONFIG_COLORS_ID);\n};\n\nexport default fn;\n","import Bundles from 'util/Bundles';\nimport config from 'config/config.json';\n\nfunction loadLanguage(appState, settings) {\n  const languageCode = appState.get('languageCode') || settings.get('languageCode') || config.defaultLanguage;\n  const i18n = settings.get('i18n');\n  const assetBaseUrl = settings.get('assets.baseUrl');\n  const assetRewrite = settings.get('assets.rewrite');\n  const supportedLanguages = settings.get('supportedLanguages');\n\n  const timeout = setTimeout(function() {\n    // Trigger a spinner if we're waiting on a request for a new language.\n    appState.trigger('loading', true);\n  }, 200);\n\n  return Bundles.loadLanguage(languageCode, i18n, {\n    baseUrl: assetBaseUrl,\n    rewrite: assetRewrite,\n  }, supportedLanguages).then(function() {\n    clearTimeout(timeout);\n    appState.trigger('loading', false);\n  });\n  // TODO: what if load language error?\n}\n\nexport default {\n  loadLanguage,\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-params: [2, 16], max-statements: [2, 20] */\n// BaseLoginRouter contains the more complicated router logic - rendering/\n// transition, etc. Most router changes should happen in LoginRouter (which is\n// responsible for adding new routes)\nimport { _, $, Backbone, Router, loc } from '@okta/courage';\nimport AppState from 'v1/models/AppState';\nimport Settings from 'models/Settings';\nimport Bundles from 'util/Bundles';\nimport Logger from 'util/Logger';\nimport AuthContainer from 'v1/views/shared/AuthContainer';\nimport Header from 'v1/views/shared/Header';\nimport SecurityBeacon from 'v1/views/shared/SecurityBeacon';\nimport Animations from 'util/Animations';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport ColorsUtil from 'util/ColorsUtil';\nimport Enums from 'util/Enums';\nimport { ConfigError } from 'util/Errors';\nimport RouterUtil from 'v1/util/RouterUtil';\nimport Util from 'util/Util';\nimport LanguageUtil from 'util/LanguageUtil';\n\nfunction isStateLessRouteHandler(router, fn) {\n  return _.find(router.stateLessRouteHandlers, function(routeName) {\n    return fn === router[routeName];\n  });\n}\n\nfunction beaconIsAvailable(Beacon, settings) {\n  if (!Beacon) {\n    return false;\n  }\n  if (Beacon === SecurityBeacon) {\n    return settings.get('features.securityImage');\n  }\n  return true;\n}\n\nexport default Router.extend({\n  Events: Backbone.Events,\n\n  initialize: function(options) {\n    // Create a default success and/or error handler if\n    // one is not provided.\n    if (!options.globalSuccessFn) {\n      options.globalSuccessFn = function() {};\n    }\n    if (!options.globalErrorFn) {\n      options.globalErrorFn = function(err) {\n        Logger.error(err);\n      };\n    }\n\n    this.settings = new Settings(_.omit(options, 'el'), { parse: true });\n\n    if (!options.el) {\n      this.settings.callGlobalError(new ConfigError(loc('error.required.el')));\n    }\n\n    $('body > div').on('click', function() {\n      // OKTA-69769 Tooltip wont close on iPhone/iPad\n      // Registering a click handler on the first div\n      // allows a tap that falls outside the tooltip\n      // to be registered as a tap by iOS\n      // and then the open tooltip will lose focus and close.\n    });\n\n    this.appState = new AppState(\n      {\n        baseUrl: this.settings.get('baseUrl'),\n        settings: this.settings,\n      },\n      { parse: true }\n    );\n\n    const wrapper = new AuthContainer({ appState: this.appState });\n\n    $(options.el).append(wrapper.render().$el);\n    this.el = `#${Enums.WIDGET_CONTAINER_ID}`;\n\n    this.header = new Header({\n      el: this.el,\n      appState: this.appState,\n      settings: this.settings,\n    });\n\n    // Hide until unitial render\n    this.hide();\n\n    this.listenTo(this.appState, 'change:transactionError', function(appState, err) {\n      RouterUtil.routeAfterAuthStatusChangeError(this, err);\n    });\n\n    this.listenTo(this.appState, 'change:transaction', function(appState, trans) {\n      RouterUtil.routeAfterAuthStatusChange(this, trans.data);\n    });\n\n    this.listenTo(this.appState, 'navigate', function(url) {\n      this.navigate(url, { trigger: true });\n    });\n  },\n\n  execute: function(cb, args) {\n    const recoveryToken = this.settings.get('recoveryToken');\n    // Recovery flow with a token passed through widget settings\n\n    if (recoveryToken) {\n      this.settings.unset('recoveryToken');\n      this.navigate(RouterUtil.createRecoveryUrl(recoveryToken), { trigger: true });\n      return;\n    }\n\n    // Refresh flow with a stateToken passed through widget settings\n    const stateToken = this.settings.get('stateToken');\n\n    if (stateToken) {\n      this.settings.unset('stateToken');\n      this.navigate(RouterUtil.createRefreshUrl(stateToken), { trigger: true });\n      return;\n    }\n\n    // Normal flow - we've either navigated to a stateless page, or are\n    // in the middle of an auth flow\n    const trans = this.appState.get('transaction');\n\n    if ((trans && trans.data) || isStateLessRouteHandler(this, cb)) {\n      cb.apply(this, args);\n      return;\n    }\n\n    // StateToken cookie exists on page load, and we are on a stateful url\n    if (this.settings.getAuthClient().tx.exists()) {\n      this.navigate(RouterUtil.createRefreshUrl(), { trigger: true });\n      return;\n    }\n\n    // We've hit a page that requires state, but have no stateToken - redirect\n    // back to primary auth\n    this.navigate('', { trigger: true });\n  },\n\n  // Overriding the default navigate method to allow the widget consumer\n  // to \"turn off\" routing - if features.router is false, the browser\n  // location bar will not update when the router navigates\n  navigate: function(fragment, options) {\n    if (this.settings.get('features.router')) {\n      return Router.prototype.navigate.apply(this, arguments);\n    }\n    if (options && options.trigger) {\n      return Backbone.history.loadUrl(fragment);\n    }\n  },\n\n  render: function(Controller, options) {\n    options || (options = {});\n\n    let Beacon = options.Beacon;\n\n    const controllerOptions = _.extend({ settings: this.settings, appState: this.appState }, _.omit(options, 'Beacon'));\n\n    // Since we have a wrapper view, render our wrapper and use its content\n    // element as our new el.\n    // Note: Render it here because we know dom is ready at this point\n    if (!this.header.rendered()) {\n      this.el = this.header.render().getContentEl();\n    }\n\n    // If we need to load a language (or apply custom i18n overrides), do\n    // this now and re-run render after it's finished.\n    if (!Bundles.isLoaded(this.appState.get('languageCode'))) {\n      return LanguageUtil.loadLanguage(this.appState, this.settings)\n        .then(_.bind(this.render, this, Controller, options));\n    }\n\n    // Load the custom colors only on the first render\n    if (this.settings.get('colors.brand') && !ColorsUtil.isLoaded()) {\n      const colors = {\n        brand: this.settings.get('colors.brand'),\n      };\n      const cspNonce = this.settings.get('cspNonce');\n\n      ColorsUtil.addStyle(colors, cspNonce);\n    }\n\n    const oldController = this.controller;\n\n    this.controller = new Controller(controllerOptions);\n\n    // Bubble up all controller events\n    this.listenTo(this.controller, 'all', this.trigger);\n\n    // First run fetchInitialData, in case the next controller needs data\n    // before it's initial render. This will leave the current page in a\n    // loading state.\n    return this.controller\n      .fetchInitialData()\n      .then(() => {\n        // Beacon transition occurs in parallel to page swap\n        if (!beaconIsAvailable(Beacon, this.settings)) {\n          Beacon = null;\n        }\n        this.header.setBeacon(Beacon, controllerOptions);\n\n        // Show before initial render\n        this.show();\n\n        this.controller.render();\n\n        if (!oldController) {\n          this.el.append(this.controller.el);\n          this.controller.postRenderAnimation();\n          return;\n        }\n\n        return Animations.swapPages({\n          $parent: this.el,\n          $oldRoot: oldController.$el,\n          $newRoot: this.controller.$el,\n          dir: oldController.state.get('navigateDir'),\n          ctx: this,\n          success: function() {\n            const flashError = this.appState.get('flashError');\n            const model = this.controller.model;\n\n            oldController.remove();\n            oldController.$el.remove();\n            this.controller.postRenderAnimation();\n            if (flashError) {\n              let errorSummary;\n              const isTerminalError = flashError.is && flashError.is('terminal');\n              if (isTerminalError) {\n                errorSummary = flashError.errorDetails.errorSummary;\n              } else {\n                errorSummary = loc((this.settings.get('features.mfaOnlyFlow')) ?\n                  'error.mfa.only.expired.session' : 'error.expired.session');\n              }\n              model.trigger('error', model, {\n                responseJSON: {\n                  errorSummary\n                },\n              });\n              this.appState.unset('flashError');\n              Util.triggerAfterError(this.controller, flashError);\n            }\n          },\n        });\n      })\n      .catch(function() {\n        // OKTA-69665 - if an error occurs in fetchInitialData, we're left in\n        // a state with two active controllers. Therefore, we clean up the\n        // old one. Note: This explicitly handles the invalid token case -\n        // if we get some other type of error which doesn't force a redirect,\n        // we will probably be left in a bad state. I.e. old controller is\n        // dropped and new controller is not rendered.\n        if (oldController) {\n          oldController.remove();\n          oldController.$el.remove();\n        }\n      });\n  },\n\n  start: function() {\n    let pushState = false;\n\n    // Support for browser's back button.\n    if (window.addEventListener && this.settings.get('features.router')) {\n      window.addEventListener('popstate', e => {\n        if (this.controller.back) {\n          e.preventDefault();\n          e.stopImmediatePropagation();\n          this.controller.back();\n        }\n      });\n      pushState = BrowserFeatures.supportsPushState();\n    }\n    Router.prototype.start.call(this, { pushState: pushState });\n  },\n\n  hide: function() {\n    this.header.$el.hide();\n  },\n\n  show: function() {\n    this.header.$el.show();\n  },\n\n  remove: function() {\n    if (this.controller) {\n      this.controller.remove();\n    }\n    this.header.$el.remove();\n    Bundles.remove();\n    Backbone.history.stop();\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-statements: [2, 16], complexity: [2, 10] */\nimport { _, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport RouterUtil from 'v1/util/RouterUtil';\nconst pushTitleTpl = hbs('{{factorName}} ({{{deviceName}}})');\n\n// deviceName is escaped on BaseForm (see BaseForm's template)\n\nconst action = function(model) {\n  let factorIndex;\n  const factorType = model.get('factorType');\n  const factorsList = this.options.appState.get('factors');\n\n  if (factorsList.hasMultipleFactorsOfSameType(factorType)) {\n    factorIndex = factorsList.getFactorIndex(factorType, model.get('id'));\n  }\n  const url = RouterUtil.createVerifyUrl(model.get('provider'), factorType, factorIndex);\n  const self = this;\n\n  this.options.appState.trigger('factorSwitched');\n  this.model.manageTransaction(function(transaction, setTransaction) {\n    // FACTOR_CHALLENGE does not have a prev link\n    if (transaction.status === 'FACTOR_CHALLENGE') {\n      this.options.appState.set('trapMfaRequiredResponse', true);\n    }\n    if (transaction.status === 'MFA_CHALLENGE' && transaction.prev) {\n      this.options.appState.set('trapMfaRequiredResponse', true);\n      return transaction.prev().then(function(trans) {\n        self.trigger('options:toggle');\n        setTransaction(trans);\n        self.options.appState.trigger('navigate', url);\n      });\n    } else {\n      self.trigger('options:toggle');\n      self.options.appState.trigger('navigate', url);\n    }\n  });\n};\n\nconst dropdownOptions = {\n  TITLE: {\n    title: _.partial(loc, 'mfa.factors.dropdown.title', 'login'),\n    className: 'dropdown-list-title',\n    disabled: true,\n  },\n\n  OKTA_VERIFY: {\n    icon: 'factor-icon mfa-okta-verify-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  OKTA_VERIFY_PUSH: {\n    icon: 'factor-icon mfa-okta-verify-30',\n    className: 'factor-option',\n    title: function() {\n      return pushTitleTpl({\n        factorName: this.model.get('factorLabel'),\n        deviceName: this.model.get('deviceName'),\n      });\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  GOOGLE_AUTH: {\n    icon: 'factor-icon mfa-google-auth-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  CUSTOM_HOTP: {\n    icon: 'factor-icon mfa-hotp-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  SYMANTEC_VIP: {\n    icon: 'factor-icon mfa-symantec-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  RSA_SECURID: {\n    icon: 'factor-icon mfa-rsa-30',\n    className: 'factor-option',\n    title: _.partial(loc, 'factor.totpHard.rsaSecurId', 'login'),\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  ON_PREM: {\n    icon: 'factor-icon mfa-onprem-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  DUO: {\n    icon: 'factor-icon mfa-duo-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  DUO_PUSH: {\n    icon: 'duo-push-16',\n    className: 'suboption factor-option',\n    // TODO: add phone number here\n    title: _.partial(loc, 'mfa.duoSecurity.push', 'login', ['XXX-XXX-7890']),\n  },\n\n  DUO_SMS: {\n    icon: 'duo-sms-16',\n    className: 'suboption factor-option',\n    // TODO: add phone number here\n    title: _.partial(loc, 'mfa.duoSecurity.sms', 'login', ['XXX-XXX-7890']),\n  },\n\n  DUO_CALL: {\n    icon: 'duo-call-16',\n    className: 'suboption factor-option',\n    // TODO: add phone number here\n    title: _.partial(loc, 'mfa.duoSecurity.call', 'login', ['XXX-XXX-7890']),\n  },\n\n  YUBIKEY: {\n    icon: 'factor-icon mfa-yubikey-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  SMS: {\n    icon: 'factor-icon mfa-sms-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  CALL: {\n    icon: 'factor-icon mfa-call-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  QUESTION: {\n    icon: 'factor-icon mfa-question-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  PASSWORD: {\n    icon: 'factor-icon mfa-password-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  WINDOWS_HELLO: {\n    icon: 'factor-icon mfa-windows-hello-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  U2F: {\n    icon: 'factor-icon mfa-u2f-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  WEBAUTHN: {\n    icon: 'factor-icon mfa-webauthn-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  EMAIL: {\n    icon: 'factor-icon mfa-email-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  GENERIC_SAML: {\n    icon: 'factor-icon mfa-custom-factor-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  GENERIC_OIDC: {\n    icon: 'factor-icon mfa-custom-factor-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n\n  CUSTOM_CLAIMS: {\n    icon: 'factor-icon mfa-custom-factor-30',\n    className: 'factor-option',\n    title: function() {\n      return this.model.get('factorLabel');\n    },\n    action: function() {\n      action.call(this, this.model);\n    },\n  },\n};\nexport default {\n  getDropdownOption: function(factorName) {\n    return dropdownOptions[factorName];\n  },\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _, $, loc, internal } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport Factor from 'v1//models/Factor';\nimport FactorsDropDownOptions from './FactorsDropDownOptions';\nconst { BaseDropDown } = internal.views.components;\n\n$(document).click(function(e) {\n  const $target = $(e.target);\n  const isDropdown = $target.closest('.option-selected').length > 0 && $target.closest('.dropdown').length > 0;\n\n  if (!isDropdown) {\n    $('.dropdown .options').hide();\n    $('.dropdown a.option-selected').attr('aria-expanded', false);\n  }\n});\n\nexport default BaseDropDown.extend({\n  className: 'bg-helper icon-button',\n  screenReaderText: function() {\n    const factors = this.options.appState.get('factors');\n    let factor;\n    let factorLabel;\n\n    if (factors) {\n      factor = FactorUtil.findFactorInFactorsArray(factors, this.options.provider, this.options.factorType);\n    } else {\n      factor = new Factor.Model(this.options.appState.get('factor'), this.toJSON());\n    }\n    factorLabel = factor.get('factorLabel');\n    return loc('mfa.factors.dropdown.sr.text', 'login', [factorLabel]);\n  },\n  events: {\n    'click a.option-selected': function(e) {\n      e.preventDefault();\n      if (_.result(this, 'disabled')) {\n        e.stopPropagation();\n      } else {\n        const expanded = this.$('.options').toggle().is(':visible');\n\n        this.$('a.option-selected').attr('aria-expanded', expanded);\n        if (expanded) {\n          this.$('#okta-dropdown-options').find('li.factor-option:first a').focus();\n        }\n      }\n    },\n    'click .dropdown-disabled': function(e) {\n      e.preventDefault();\n      e.stopPropagation();\n    },\n  },\n  initialize: function() {\n    this.addOption(FactorsDropDownOptions.getDropdownOption('TITLE'));\n    const factorsList = this.options.appState.get('factors');\n    const multiplePushFactors = factorsList.hasMultipleFactorsOfSameType('push');\n\n    factorsList.each(function(factor) {\n      // Do not add okta totp if there are multiple okta push (each push will have an inline totp)\n      if (!(factor.get('factorType') === 'token:software:totp' && multiplePushFactors)) {\n        this.addOption(FactorsDropDownOptions.getDropdownOption(factor.get('factorName')), { model: factor });\n        this.listenTo(this.last(), 'options:toggle', function() {\n          this.$('.options').hide();\n          this.$('a.option-selected').attr('aria-expanded', false);\n        });\n      }\n    }, this);\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint complexity: [2, 8] */\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Factor from 'v1/models/Factor';\nimport Q from 'q';\nimport FactorUtil from 'util/FactorUtil';\nimport FactorsDropDown from 'v1/views/mfa-verify/dropdown/FactorsDropDown';\nexport default View.extend({\n  template: hbs(\n    '\\\n      <div class=\"beacon-blank auth-beacon\">\\\n        <div class=\"beacon-blank js-blank-beacon-border auth-beacon-border\"></div>\\\n      </div>\\\n      <div class=\"bg-helper auth-beacon auth-beacon-factor {{className}}\" data-se=\"factor-beacon\">\\\n        <div class=\"okta-sign-in-beacon-border auth-beacon-border\"></div>\\\n      </div>\\\n      <div data-type=\"factor-types-dropdown\" class=\"factors-dropdown-wrap\"></div>\\\n    '\n  ),\n\n  events: {\n    'click .auth-beacon-factor': function(e) {\n      e.preventDefault();\n      e.stopPropagation();\n      const expanded = this.$('.dropdown .options').toggle().is(':visible');\n\n      this.$('a.option-selected').attr('aria-expanded', expanded);\n      if (expanded) {\n        this.$('#okta-dropdown-options').find('li.factor-option:first a').focus();\n      }\n    },\n  },\n\n  initialize: function() {\n    this.options.appState.set('beaconType', 'factor');\n  },\n\n  getTemplateData: function() {\n    const factors = this.options.appState.get('factors');\n    let factor;\n    let className;\n\n    if (factors) {\n      factor = FactorUtil.findFactorInFactorsArray(factors, this.options.provider, this.options.factorType);\n    } else {\n      factor = new Factor.Model(this.options.appState.get('factor'));\n    }\n    className = factor.get('iconClassName');\n    return { className: className || '' };\n  },\n\n  postRender: function() {\n    if (this.options.animate) {\n      this.$('.auth-beacon-factor').fadeIn(200);\n    }\n    const appState = this.options.appState;\n\n    if (appState.get('hasMultipleFactorsAvailable')) {\n      this.add(FactorsDropDown, '[data-type=\"factor-types-dropdown\"]');\n    }\n  },\n\n  fadeOut: function() {\n    const deferred = Q.defer();\n\n    this.$('.auth-beacon-factor').fadeOut(200, function() {\n      deferred.resolve();\n    });\n    return deferred.promise;\n  },\n\n  equals: function(Beacon, options) {\n    return (\n      Beacon &&\n      this instanceof Beacon &&\n      options.provider === this.options.provider &&\n      (options.factorType === this.options.factorType ||\n        (FactorUtil.isOktaVerify(options.provider, options.factorType) &&\n          FactorUtil.isOktaVerify(this.options.provider, this.options.factorType)))\n    );\n  },\n});\n","/*!\n * Copyright (c) 2019, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nexport default View.extend({\n  className: 'piv-beacon',\n  template: hbs(\n    '\\\n      <div class=\"beacon-blank auth-beacon\">\\\n        <div class=\"beacon-blank js-blank-beacon-border auth-beacon-border\"></div>\\\n      </div>\\\n      <div class=\"bg-helper auth-beacon smartcard\" data-se=\"piv-beacon\">\\\n        <div class=\"okta-sign-in-beacon-border auth-beacon-border\"></div>\\\n      </div>\\\n    '\n  ),\n\n  equals: function(Beacon) {\n    return Beacon && this instanceof Beacon;\n  },\n});\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-params: 0 */\nimport AccountUnlockedController from 'v1/controllers/AccountUnlockedController';\nimport ActivateTotpController from 'v1/controllers/ActivateTotpController';\nimport AdminConsentRequiredController from 'v1/controllers/AdminConsentRequiredController';\nimport BarcodePushController from 'v1/controllers/BarcodePushController';\nimport BarcodeTotpController from 'v1/controllers/BarcodeTotpController';\nimport ConsentRequiredController from 'v1/controllers/ConsentRequiredController';\nimport CustomPasswordExpiredController from 'v1/controllers/CustomPasswordExpiredController';\nimport DeviceActivateController from 'v1/controllers/DeviceActivateController';\nimport DeviceActivateTerminalController from 'v1/controllers/DeviceActivateTerminalController';\nimport EnrollActivateCustomFactorController from 'v1/controllers/EnrollActivateCustomFactorController';\nimport EnrollActivateEmailController from 'v1/controllers/EnrollActivateEmailController';\nimport EnrollCallAndSmsController from 'v1/controllers/EnrollCallAndSmsController';\nimport EnrollChoicesController from 'v1/controllers/EnrollChoicesController';\nimport EnrollCustomFactorController from 'v1/controllers/EnrollCustomFactorController';\nimport EnrollDuoController from 'v1/controllers/EnrollDuoController';\nimport EnrollEmailController from 'v1/controllers/EnrollEmailController';\nimport EnrollHotpController from 'v1/controllers/EnrollHotpController';\nimport EnrollOnPremController from 'v1/controllers/EnrollOnPremController';\nimport EnrollPasswordController from 'v1/controllers/EnrollPasswordController';\nimport EnrollQuestionController from 'v1/controllers/EnrollQuestionController';\nimport EnrollSymantecVipController from 'v1/controllers/EnrollSymantecVipController';\nimport EnrollTotpController from 'v1/controllers/EnrollTotpController';\nimport EnrollU2FController from 'v1/controllers/EnrollU2FController';\nimport EnrollUserController from 'v1/controllers/EnrollUserController';\nimport EnrollWebauthnController from 'v1/controllers/EnrollWebauthnController';\nimport EnrollWindowsHelloController from 'v1/controllers/EnrollWindowsHelloController';\nimport EnrollYubikeyController from 'v1/controllers/EnrollYubikeyController';\nimport EnrollmentLinkSentController from 'v1/controllers/EnrollmentLinkSentController';\nimport EnterPasscodePushFlowController from 'v1/controllers/EnterPasscodePushFlowController';\nimport ForgotPasswordController from 'v1/controllers/ForgotPasswordController';\nimport IDPDiscoveryController from 'v1/controllers/IDPDiscoveryController';\nimport ForceIDPDiscoveryController from 'v1/controllers/ForceIDPDiscoveryController';\nimport ManualSetupPushController from 'v1/controllers/ManualSetupPushController';\nimport ManualSetupTotpController from 'v1/controllers/ManualSetupTotpController';\nimport MfaVerifyController from 'v1/controllers/MfaVerifyController';\nimport PasswordExpiredController from 'v1/controllers/PasswordExpiredController';\nimport PasswordResetController from 'v1/controllers/PasswordResetController';\nimport PollController from 'v1/controllers/PollController';\nimport PrimaryAuthController from 'v1/controllers/PrimaryAuthController';\nimport PwdResetEmailSentController from 'v1/controllers/PwdResetEmailSentController';\nimport RecoveryChallengeController from 'v1/controllers/RecoveryChallengeController';\nimport RecoveryLoadingController from 'v1/controllers/RecoveryLoadingController';\nimport RecoveryQuestionController from 'v1/controllers/RecoveryQuestionController';\nimport RefreshAuthStateController from 'v1/controllers/RefreshAuthStateController';\nimport RegistrationCompleteController from 'v1/controllers/RegistrationCompleteController';\nimport RegistrationController from 'v1/controllers/RegistrationController';\nimport UnlockAccountController from 'v1/controllers/UnlockAccountController';\nimport UnlockEmailSentController from 'v1/controllers/UnlockEmailSentController';\nimport VerifyCustomFactorController from 'v1/controllers/VerifyCustomFactorController';\nimport VerifyDuoController from 'v1/controllers/VerifyDuoController';\nimport VerifyPIVController from 'v1/controllers/VerifyPIVController';\nimport VerifyU2FController from 'v1/controllers/VerifyU2FController';\nimport VerifyWebauthnController from 'v1/controllers/VerifyWebauthnController';\nimport VerifyWindowsHelloController from 'v1/controllers/VerifyWindowsHelloController';\nimport ErrorStateController from 'v1/controllers/ErrorStateController';\nimport BaseLoginRouter from 'v1/BaseLoginRouter';\nimport FactorBeacon from 'v1/views/shared/FactorBeacon';\nimport PIVBeacon from 'v1/views/shared/PIVBeacon';\nimport SecurityBeacon from 'v1/views/shared/SecurityBeacon';\n\nimport Enums from 'util/Enums';\n\nexport default BaseLoginRouter.extend({\n  routes: {\n    '': 'defaultAuth',\n    signin: 'primaryAuth',\n    'signin/okta/:username': 'primaryAuth',\n    'signin/verify/duo/web': 'verifyDuo',\n    'signin/verify/piv': 'verifyPIV',\n    'signin/poll': 'poll',\n    'signin/verify/fido/webauthn': 'verifyWebauthn',\n    'signin/verify/webauthn': 'verifyWebauthn',\n    'signin/verify/fido/u2f': 'verifyU2F',\n    'signin/verify/u2f': 'verifyU2F',\n    'signin/verify/generic_saml/assertion:saml2': 'verifySAMLFactor',\n    'signin/verify/generic_oidc/assertion:oidc': 'verifyOIDCFactor',\n    'signin/verify/custom/claims_provider': 'verifyClaimsFactor',\n    'signin/verify/:factorType': 'verifyNoProvider',\n    'signin/verify/:provider/:factorType(/:factorIndex)': 'verify',\n    'signin/enroll': 'enrollChoices',\n    'signin/enroll/duo/web': 'enrollDuo',\n    'signin/enroll/okta/question': 'enrollQuestion',\n    'signin/enroll/okta/password': 'enrollPassword',\n    'signin/enroll/okta/sms': 'enrollSms',\n    'signin/enroll/okta/call': 'enrollCall',\n    'signin/enroll/okta/email': 'enrollEmail',\n    'signin/enroll-activate/okta/sms': 'enrollSms',\n    'signin/enroll-activate/okta/call': 'enrollCall',\n    'signin/enroll/rsa/token': 'enrollRsa',\n    'signin/enroll/del_oath/token': 'enrollOnPrem',\n    'signin/enroll/symantec/token': 'enrollSymantecVip',\n    'signin/enroll/yubico/token:hardware': 'enrollYubikey',\n    'signin/enroll/fido/webauthn': 'enrollWebauthn',\n    'signin/enroll/fido/u2f': 'enrollU2F',\n    'signin/enroll/generic_saml/assertion:saml2': 'enrollSAMLFactor',\n    'signin/enroll/generic_oidc/assertion:oidc': 'enrollOIDCFactor',\n    'signin/enroll/custom/claims_provider': 'enrollClaimsFactor',\n    'signin/enroll/custom/token:hotp': 'enrollHotpFactor',\n    'signin/enroll/:provider/:factorType': 'enrollTotpFactor',\n    'signin/enroll-activate/okta/email': 'enrollActivateEmail',\n    'signin/enroll-activate/okta/push': 'scanBarcodePushFactor',\n    'signin/enroll-activate/okta/push/manual': 'manualSetupPushFactor',\n    'signin/enroll-activate/okta/push/sent': 'activationLinkSent',\n    'signin/enroll-activate/okta/token:software:totp/passcode': 'enterPasscodeInPushEnrollmentFlow',\n    'signin/enroll-activate/custom/claims_provider': 'enrollActivateClaimsFactor',\n    'signin/enroll-activate/:provider/:factorType': 'scanBarcodeTotpFactor',\n    'signin/enroll-activate/:provider/:factorType/activate': 'activateTotpFactor',\n    'signin/enroll-activate/:provider/:factorType/manual': 'manualSetupTotpFactor',\n    'signin/password-expired': 'passwordExpired',\n    'signin/custom-password-expired': 'customPasswordExpired',\n    'signin/forgot-password': 'forgotPassword',\n    'signin/recovery-challenge': 'recoveryChallenge',\n    'signin/recovery-emailed': 'recoveryEmailSent',\n    'signin/recovery-question': 'recoveryQuestion',\n    'signin/password-reset': 'passwordReset',\n    'signin/reset-password/:token': 'recoveryLoading',\n    'signin/user-unlock/:token': 'recoveryLoading',\n    'signin/recovery/:token': 'recoveryLoading',\n    'signin/unlock-emailed': 'unlockEmailSent',\n    'signin/unlock': 'unlockAccount',\n    'signin/account-unlocked': 'accountUnlocked',\n    'signin/refresh-auth-state(/:token)': 'refreshAuthState',\n    'signin/register': 'register',\n    'signin/register-complete': 'registerComplete',\n    'signin/error': 'errorState',\n    'signin/consent': 'consentRequired',\n    'signin/admin-consent': 'adminConsentRequired',\n    'signin/enroll-user': 'enrollUser',\n    'signin/device-activate-complete': 'deviceActivateComplete',\n    'signin/device-activate': 'deviceActivate',\n    'signin/idp-discovery-check': 'idpDiscoveryCheck',\n    '*wildcard': 'defaultAuth',\n  },\n\n  // Route handlers that do not require a stateToken. If the page is refreshed,\n  // these functions will not require a status call to refresh the stateToken.\n  stateLessRouteHandlers: [\n    'defaultAuth',\n    'idpDiscovery',\n    'primaryAuth',\n    'forgotPassword',\n    'recoveryLoading',\n    'unlockAccount',\n    'refreshAuthState',\n    'register',\n    'registerComplete',\n    'errorState',\n    'verifyPIV',\n  ],\n\n  defaultAuth: function() {\n    if (window.location.hash === `#${Enums.WIDGET_CONTAINER_ID}`) {\n      document.getElementById(Enums.WIDGET_CONTAINER_ID).focus();\n      return;\n    }\n    if (this.settings.get('features.idpDiscovery')) {\n      this.idpDiscovery();\n    } else {\n      this.primaryAuth();\n    }\n  },\n\n  idpDiscoveryCheck: function() {\n    this.render(ForceIDPDiscoveryController, { Beacon: SecurityBeacon });\n  },\n\n  idpDiscovery: function() {\n    this.render(IDPDiscoveryController, { Beacon: SecurityBeacon });\n  },\n\n  primaryAuth: function(username) {\n    this.render(PrimaryAuthController, {\n      Beacon: SecurityBeacon,\n      username\n    });\n  },\n\n  verifyDuo: function() {\n    this.render(VerifyDuoController, {\n      provider: 'DUO',\n      factorType: 'web',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  verifyPIV: function() {\n    this.render(VerifyPIVController, { Beacon: PIVBeacon });\n  },\n\n  poll: function() {\n    this.render(PollController);\n  },\n\n  verifyWebauthn: function() {\n    if (this.settings.get('features.webauthn')) {\n      this.render(VerifyWebauthnController, {\n        provider: 'FIDO',\n        factorType: 'webauthn',\n        Beacon: FactorBeacon,\n      });\n    } else {\n      this.render(VerifyWindowsHelloController, {\n        provider: 'FIDO',\n        factorType: 'webauthn',\n        Beacon: FactorBeacon,\n      });\n    }\n  },\n\n  verifyU2F: function() {\n    this.render(VerifyU2FController, {\n      provider: 'FIDO',\n      factorType: 'u2f',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  verifySAMLFactor: function() {\n    this.render(VerifyCustomFactorController, {\n      provider: 'GENERIC_SAML',\n      factorType: 'assertion:saml2',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  verifyOIDCFactor: function() {\n    this.render(VerifyCustomFactorController, {\n      provider: 'GENERIC_OIDC',\n      factorType: 'assertion:oidc',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  verifyClaimsFactor: function() {\n    this.render(VerifyCustomFactorController, {\n      provider: 'CUSTOM',\n      factorType: 'claims_provider',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  verify: function(provider, factorType, factorIndex) {\n    this.render(MfaVerifyController, {\n      provider: provider.toUpperCase(),\n      factorType: factorType,\n      factorIndex: factorIndex,\n      Beacon: FactorBeacon,\n    });\n  },\n\n  verifyNoProvider: function(factorType) {\n    this.render(MfaVerifyController, {\n      factorType: factorType,\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollChoices: function() {\n    this.render(EnrollChoicesController, { Beacon: SecurityBeacon });\n  },\n\n  enrollDuo: function() {\n    this.render(EnrollDuoController, {\n      provider: 'DUO',\n      factorType: 'web',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollQuestion: function() {\n    this.render(EnrollQuestionController, {\n      provider: 'OKTA',\n      factorType: 'question',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollPassword: function() {\n    this.render(EnrollPasswordController, {\n      provider: 'OKTA',\n      factorType: 'password',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollSms: function() {\n    this.render(EnrollCallAndSmsController, {\n      provider: 'OKTA',\n      factorType: 'sms',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollCall: function() {\n    this.render(EnrollCallAndSmsController, {\n      provider: 'OKTA',\n      factorType: 'call',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollEmail: function() {\n    this.render(EnrollEmailController, {\n      provider: 'OKTA',\n      factorType: 'email',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollActivateEmail: function() {\n    this.render(EnrollActivateEmailController, {\n      provider: 'OKTA',\n      factorType: 'email',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollRsa: function() {\n    this.render(EnrollOnPremController, {\n      provider: 'RSA',\n      factorType: 'token',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollOnPrem: function() {\n    this.render(EnrollOnPremController, {\n      provider: 'DEL_OATH',\n      factorType: 'token',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollSymantecVip: function() {\n    this.render(EnrollSymantecVipController, {\n      provider: 'SYMANTEC',\n      factorType: 'token',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollYubikey: function() {\n    this.render(EnrollYubikeyController, {\n      provider: 'YUBICO',\n      factorType: 'token:hardware',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollSAMLFactor: function() {\n    this.render(EnrollCustomFactorController, {\n      provider: 'GENERIC_SAML',\n      factorType: 'assertion:saml2',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollOIDCFactor: function() {\n    this.render(EnrollCustomFactorController, {\n      provider: 'GENERIC_OIDC',\n      factorType: 'assertion:oidc',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollClaimsFactor: function() {\n    this.render(EnrollCustomFactorController, {\n      provider: 'CUSTOM',\n      factorType: 'claims_provider',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollActivateClaimsFactor: function() {\n    this.render(EnrollActivateCustomFactorController, {\n      provider: 'CUSTOM',\n      factorType: 'claims_provider',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollTotpFactor: function(provider, factorType) {\n    this.render(EnrollTotpController, {\n      provider: provider.toUpperCase(),\n      factorType: factorType,\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollHotpFactor: function() {\n    this.render(EnrollHotpController, {\n      provider: 'CUSTOM',\n      factorType: 'token:hotp',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enrollWebauthn: function() {\n    if (this.settings.get('features.webauthn')) {\n      this.render(EnrollWebauthnController, {\n        provider: 'FIDO',\n        factorType: 'webauthn',\n        Beacon: FactorBeacon,\n      });\n    } else {\n      this.render(EnrollWindowsHelloController, {\n        provider: 'FIDO',\n        factorType: 'webauthn',\n        Beacon: FactorBeacon,\n      });\n    }\n  },\n\n  enrollU2F: function() {\n    this.render(EnrollU2FController, {\n      provider: 'FIDO',\n      factorType: 'u2f',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  scanBarcodeTotpFactor: function(provider, factorType) {\n    this.render(BarcodeTotpController, {\n      provider: provider.toUpperCase(),\n      factorType: factorType,\n      Beacon: FactorBeacon,\n    });\n  },\n\n  scanBarcodePushFactor: function() {\n    this.render(BarcodePushController, {\n      provider: 'OKTA',\n      factorType: 'push',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  activateTotpFactor: function(provider, factorType) {\n    this.render(ActivateTotpController, {\n      provider: provider.toUpperCase(),\n      factorType: factorType,\n      Beacon: FactorBeacon,\n    });\n  },\n\n  manualSetupTotpFactor: function(provider, factorType) {\n    this.render(ManualSetupTotpController, {\n      provider: provider.toUpperCase(),\n      factorType: factorType,\n      Beacon: FactorBeacon,\n    });\n  },\n\n  manualSetupPushFactor: function() {\n    this.render(ManualSetupPushController, {\n      provider: 'OKTA',\n      factorType: 'push',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  activationLinkSent: function() {\n    this.render(EnrollmentLinkSentController, {\n      provider: 'OKTA',\n      factorType: 'push',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  enterPasscodeInPushEnrollmentFlow: function() {\n    this.render(EnterPasscodePushFlowController, {\n      provider: 'OKTA',\n      factorType: 'token:software:totp',\n      Beacon: FactorBeacon,\n    });\n  },\n\n  passwordExpired: function() {\n    this.render(PasswordExpiredController, { Beacon: SecurityBeacon });\n  },\n\n  customPasswordExpired: function() {\n    this.render(CustomPasswordExpiredController, { Beacon: SecurityBeacon });\n  },\n\n  forgotPassword: function() {\n    this.render(ForgotPasswordController);\n  },\n\n  recoveryChallenge: function() {\n    this.render(RecoveryChallengeController, { Beacon: SecurityBeacon });\n  },\n\n  recoveryEmailSent: function() {\n    this.render(PwdResetEmailSentController, { Beacon: SecurityBeacon });\n  },\n\n  unlockEmailSent: function() {\n    this.render(UnlockEmailSentController, { Beacon: SecurityBeacon });\n  },\n\n  recoveryQuestion: function() {\n    this.render(RecoveryQuestionController, { Beacon: SecurityBeacon });\n  },\n\n  passwordReset: function() {\n    this.render(PasswordResetController, { Beacon: SecurityBeacon });\n  },\n\n  recoveryLoading: function(token) {\n    this.render(RecoveryLoadingController, {\n      token: token,\n      Beacon: SecurityBeacon,\n    });\n  },\n\n  unlockAccount: function() {\n    this.render(UnlockAccountController);\n  },\n\n  accountUnlocked: function() {\n    this.render(AccountUnlockedController, { Beacon: SecurityBeacon });\n  },\n\n  refreshAuthState: function(token) {\n    this.render(RefreshAuthStateController, {\n      token: token,\n      Beacon: SecurityBeacon,\n    });\n  },\n\n  register: function() {\n    this.render(RegistrationController);\n  },\n\n  registerComplete: function() {\n    this.render(RegistrationCompleteController);\n  },\n\n  errorState: function() {\n    this.render(ErrorStateController, { Beacon: SecurityBeacon });\n  },\n\n  consentRequired: function() {\n    this.render(ConsentRequiredController);\n  },\n\n  adminConsentRequired: function() {\n    this.render(AdminConsentRequiredController);\n  },\n\n  enrollUser: function() {\n    this.render(EnrollUserController);\n  },\n\n  deviceActivate: function() {\n    this.render(DeviceActivateController);\n  },\n  deviceActivateComplete: function() {\n    this.render(DeviceActivateTerminalController);\n  },\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport Enums from 'util/Enums';\n\n/**\n * Structure of FORMS object:\n * { [CONSTANT]: remediationForm.name }\n */\nconst FORMS = {\n  IDENTIFY: 'identify',\n  SELECT_IDENTIFY: 'select-identify',\n  IDENTIFY_RECOVERY: 'identify-recovery',\n  SELECT_ENROLL_PROFILE: 'select-enroll-profile',\n  ENROLL_PROFILE: 'enroll-profile',\n  ENROLL_PROFILE_UPDATE: 'profile-update',\n  UNLOCK_ACCOUNT: 'unlock-account',\n  REQUEST_ACTIVATION: 'request-activation-email',\n\n  CONSENT_ADMIN: 'admin-consent',\n  CONSENT_ENDUSER: 'consent',\n  CONSENT_GRANULAR: 'granular-consent',\n  CONSENT_EMAIL_CHALLENGE: 'email-challenge-consent',\n\n  SELECT_AUTHENTICATOR_AUTHENTICATE: 'select-authenticator-authenticate',\n  SELECT_AUTHENTICATOR_UNLOCK: 'select-authenticator-unlock-account',\n\n  AUTHENTICATOR_VERIFICATION_DATA: 'authenticator-verification-data',\n  CHALLENGE_AUTHENTICATOR: 'challenge-authenticator',\n  CHALLENGE_POLL: 'challenge-poll',\n  RESEND: 'resend',\n\n  SELECT_AUTHENTICATOR_ENROLL: 'select-authenticator-enroll',\n  SELECT_AUTHENTICATOR_ENROLL_DATA: 'select-authenticator-enroll-data',\n  AUTHENTICATOR_ENROLLMENT_DATA: 'authenticator-enrollment-data',\n  ENROLL_AUTHENTICATOR: 'enroll-authenticator',\n  SELECT_ENROLLMENT_CHANNEL: 'select-enrollment-channel',\n  ENROLLMENT_CHANNEL_DATA: 'enrollment-channel-data',\n  ENROLL_POLL: 'enroll-poll',\n  REENROLL_AUTHENTICATOR: 'reenroll-authenticator',\n  REENROLL_AUTHENTICATOR_WARNING: 'reenroll-authenticator-warning',\n  REENROLL_CUSTOM_PASSWORD_EXPIRY: 'reenroll-custom-password-expiry',\n  REENROLL_CUSTOM_PASSWORD_EXPIRY_WARNING: 'reenroll-custom-password-expiry-warning',\n  RESET_AUTHENTICATOR: 'reset-authenticator',\n  SKIP: 'skip',\n  POLL: 'poll',\n\n  FAILURE_REDIRECT: 'failure-redirect',\n  SUCCESS_REDIRECT: 'success-redirect',\n  REDIRECT_IDP: 'redirect-idp',\n  PIV_IDP: 'piv-idp',\n\n  DEVICE_CHALLENGE_POLL: 'device-challenge-poll',\n  DEVICE_APPLE_SSO_EXTENSION: 'device-apple-sso-extension',\n  CANCEL_TRANSACTION: 'cancel-transaction',\n  LAUNCH_AUTHENTICATOR: 'launch-authenticator',\n  LAUNCH_WEBAUTHN_AUTHENTICATOR: 'launch-webauthn-authenticator',\n  ENROLL_WEBAUTHN_RESIDENTKEY: 'enroll-webauthn-residentkey',\n\n  DEVICE_ENROLLMENT_TERMINAL: 'device-enrollment-terminal',\n\n  USER_CODE: 'user-code',\n\n  // 'terminal` is not ION Form name but only coined in widget\n  // for rendering a page that user has nothing to remediate.\n  TERMINAL: 'terminal',\n};\n// Forms added here do not show the Sign out link\nconst FORMS_WITHOUT_SIGNOUT = [\n  FORMS.IDENTIFY,\n  FORMS.SUCCESS_REDIRECT,\n  FORMS.ENROLL_PROFILE,\n  FORMS.DEVICE_ENROLLMENT_TERMINAL,\n  FORMS.CONSENT_ADMIN,\n  FORMS.CONSENT_ENDUSER,\n  FORMS.CONSENT_GRANULAR,\n  FORMS.CONSENT_EMAIL_CHALLENGE,\n  FORMS.USER_CODE\n];\n\nconst FORMS_WITH_STATIC_BACK_LINK = [\n  FORMS.SELECT_AUTHENTICATOR_ENROLL,\n  FORMS.SELECT_AUTHENTICATOR_AUTHENTICATE\n];\n\nconst FORMS_FOR_VERIFICATION = [\n  FORMS.SELECT_AUTHENTICATOR_AUTHENTICATE,\n  FORMS.CHALLENGE_AUTHENTICATOR,\n  FORMS.CHALLENGE_POLL,\n  FORMS.RESEND\n];\n\nconst AUTHENTICATOR_KEY = {\n  EMAIL: 'okta_email',\n  PASSWORD: 'okta_password',\n  PHONE: 'phone_number',\n  WEBAUTHN: 'webauthn',\n  SECURITY_QUESTION: 'security_question',\n  OV: 'okta_verify',\n  GOOGLE_OTP: 'google_otp',\n  ON_PREM: 'onprem_mfa',\n  RSA: 'rsa_token',\n  DUO: 'duo',\n  IDP: 'external_idp',\n  CUSTOM_OTP: 'custom_otp',\n  SYMANTEC_VIP: 'symantec_vip',\n  YUBIKEY: 'yubikey_token',\n  CUSTOM_APP: 'custom_app',\n  SMARTCARD: 'smart_card_idp'\n};\n\nconst AUTHENTICATOR_METHODS = {\n  PUSH: 'push',\n};\n\nconst FORM_NAME_TO_OPERATION_MAP = {\n  [FORMS.SELECT_AUTHENTICATOR_UNLOCK]: Enums.UNLOCK_ACCOUNT,\n  [FORMS.IDENTIFY]: Enums.PRIMARY_AUTH,\n  [FORMS.IDENTIFY_RECOVERY]: Enums.FORGOT_PASSWORD,\n};\n\nconst ENROLLED_PASSWORD_RECOVERY_LINK = 'currentAuthenticatorEnrollment-recover';\nconst ORG_PASSWORD_RECOVERY_LINK = 'currentAuthenticator-recover';\nconst ACTIONS = {\n  ENROLLED_PASSWORD_RECOVERY_LINK,\n  ORG_PASSWORD_RECOVERY_LINK\n};\n\n// Possible Remediation Form Field Hints\nconst HINTS = {\n  CAPTCHA: 'captcha',\n};\n\nconst TERMINAL_FORMS = [\n  FORMS.TERMINAL,\n  FORMS.DEVICE_ENROLLMENT_TERMINAL,\n];\nconst IDP_FORM_TYPE = {\n  X509: 'X509',\n};\n\n// Possible options for the SIW interstitial redirect view\nconst INTERSTITIAL_REDIRECT_VIEW = {\n  DEFAULT: 'DEFAULT',\n  NONE: 'NONE'\n};\n\nconst ATTR_FORMAT = {\n  COUNTRY_CODE: 'country-code',\n};\n\nexport {\n  ACTIONS,\n  FORMS,\n  FORMS_WITHOUT_SIGNOUT,\n  FORMS_WITH_STATIC_BACK_LINK,\n  FORMS_FOR_VERIFICATION,\n  AUTHENTICATOR_KEY,\n  AUTHENTICATOR_METHODS,\n  FORM_NAME_TO_OPERATION_MAP,\n  HINTS,\n  TERMINAL_FORMS,\n  IDP_FORM_TYPE,\n  INTERSTITIAL_REDIRECT_VIEW,\n  ATTR_FORMAT,\n};\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _ } from '@okta/courage';\nimport { AUTHENTICATOR_KEY } from '../RemediationConstants';\n\n/**\n * Example of the option like\n * @param {AuthenticatorOption[]} options\n * @param {( AuthenticatorEnrollment[] || Authenticator[] )} authenticators\n */\nexport function createOVOptions(options = []) {\n  // Split OV into individual entries for verification (one for each method).\n  const ovItem = options.find((option) => option.relatesTo.key === AUTHENTICATOR_KEY.OV);\n  const methodTypeObj = ovItem?.value?.form?.value?.find(v => v.name === 'methodType');\n  const methodOptions = methodTypeObj?.options;\n  let signedNonceOption;\n  if (methodOptions) {\n    const ovOptions = [];\n    methodOptions.forEach((method) => {\n      // get value object from the ov item\n      const value = [...ovItem.value.form.value];\n      // get index of the methodType object within the value object\n      const methodTypeIndex = ovItem.value.form.value.findIndex((v) => v.name === 'methodType');\n      // create a new methodType object that removes the options array and\n      // has a value of the current method\n      const newMethodTypeObj = Object.assign(_.omit(methodTypeObj, 'options'), method);\n      // set the methodType field to be required and immutable in our UI,\n      // so it is always sent to the backend.\n      newMethodTypeObj.required = true;\n      newMethodTypeObj.mutable = false;\n      // replace old methodType object with the new one\n      value.splice(methodTypeIndex, 1, newMethodTypeObj);\n      // return a new ov item for a specific method\n      const newItem = Object.assign({}, ovItem, {\n        label: method.label,\n        value: {\n          form: {\n            value,\n          }\n        }\n      });\n      if (method.value === 'signed_nonce') {\n        signedNonceOption = newItem;\n      } else {\n        ovOptions.push(newItem);\n      }\n    });\n    const ovIndex = options.findIndex((option) => option.relatesTo.key === AUTHENTICATOR_KEY.OV);\n    options.splice(ovIndex, 1, ...ovOptions);\n\n    // ReArrange fastpass in options based on deviceKnown\n    if (signedNonceOption) {\n      ovItem.relatesTo.deviceKnown ? options.unshift(signedNonceOption) : options.push(signedNonceOption);\n    }\n  }\n}\n\nfunction createAuthenticatorOptions(options = []) {\n  createOVOptions(options);\n  return options.map(option => {\n    const value = option.value?.form?.value || [];\n\n    // Each authenticator option has list of ION field.\n    // Currently we only support merely selecting one of options\n    // rather than pop up another page to collect extra data\n    // (in order to fill value for `mutable: true; value: null` fields).\n    // The only reason of such design is to simplify widget implementation\n    // but could subject to change in later releases.\n    // Thus only surface up fields that are `required: true; mutable: false`\n    // which implies it already has `value`.\n    const valueObject = value\n      .filter(v => v.required === true && v.mutable === false)\n      .reduce((init, v) => {\n        return Object.assign(init, { [v.name]: v.value });\n      }, {});\n    return {\n      label: option.label,\n      value: valueObject,\n      relatesTo: option.relatesTo,\n      authenticatorKey: option.relatesTo?.key,\n    };\n  });\n}\n\nfunction getAuthenticatorsEnrollUiSchema({ options }) {\n  return {\n    type: 'authenticatorEnrollSelect',\n    options: createAuthenticatorOptions(options),\n  };\n}\n\nfunction getAuthenticatorsVerifyUiSchema({ options }) {\n  return {\n    type: 'authenticatorVerifySelect',\n    options: createAuthenticatorOptions(options),\n  };\n}\n\n/**\n  * Create ui schema for ION field that has type 'object'.\n  */\nexport default function createUiSchemaForObject(ionFormField, remediationForm, transformedResp,\n  createUISchema, settings) {\n  const uiSchema = {};\n\n  if (ionFormField.name === 'authenticator' &&\n    (remediationForm.name === 'select-authenticator-authenticate' ||\n    remediationForm.name === 'select-authenticator-unlock-account')) {\n    // 1. when `select-authenticator-authenticator`,\n    // create customize type so that display authenticator list as selectable list\n    Object.assign(uiSchema, getAuthenticatorsVerifyUiSchema(ionFormField));\n  } else if (ionFormField.name === 'authenticator' && remediationForm.name === 'select-authenticator-enroll') {\n    // 2. when `select-authenticator-enroll`,\n    // create customize type so that display authenticator list as selectable list\n    Object.assign(uiSchema, getAuthenticatorsEnrollUiSchema(ionFormField));\n  } else if (Array.isArray(ionFormField.options)) {\n    // 3. For other cases, create ui schema for each `option` in order to render\n    // different view for each option.\n    //\n    // e.g. { \"name\": \"credentials\", \"type\": \"object\", options: [ {value: {form: value:[]} ]\n    uiSchema.optionsUiSchemas = ionFormField.options.map(opt => {\n      return createUISchema(transformedResp, {\n        value: [\n          {\n            name: ionFormField.name,\n            value: opt.value,\n          }\n        ]\n      }, settings);\n    });\n    uiSchema.options = ionFormField.options.map((opt, index) => {\n      return { label: opt.label, value: index };\n    });\n    // assume (default to) use radio buttons to switch sub-schema.\n    uiSchema.type = 'radio';\n    uiSchema.value = '0';\n    uiSchema.name = `sub_schema_local_${ionFormField.name}`;\n  }\n\n  return uiSchema;\n}\n","/*!\n * Copyright (c) 2021, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport async function executeHookFunctions(functions) {\n  for (let i = 0; i < functions.length; i++) {\n    await functions[i]();\n  }\n}\n\nexport async function executeHooksBefore(hook) {\n  if (!hook || !hook.before || !hook.before.length) {\n    return;\n  }\n  await executeHookFunctions(hook.before);\n}\n\nexport async function executeHooksAfter(hook) {\n  if (!hook || !hook.after || !hook.after.length) {\n    return;\n  }\n  await executeHookFunctions(hook.after);\n}\n\nexport function mergeHook(hooks, formName, hookToMerge) {\n  const existingHook = hooks[formName] = hooks[formName] || { before: [], after: [] };\n  if (hookToMerge.before) {\n    existingHook.before = (existingHook.before || []).concat(hookToMerge.before);\n  }\n  if (hookToMerge.after) {\n    existingHook.after = (existingHook.after || []).concat(hookToMerge.after);\n  }\n}\n","import { _ } from '@okta/courage';\n\ndeclare module '@okta/courage' {\n  interface OktaUnderscore {\n    nestedOmit(obj: Record<string, any>, names): Record<string, any>\n  }\n}\n\n_.mixin({\n  nestedOmit: function(obj, names) {\n    let result = _.omit(obj, names);\n\n    if (names.includes(result.name)) {\n      result = _.omit(result, 'value');\n    }\n\n    _.each(result, function(val, key) {\n      if (Array.isArray(val)) {\n        result[key] = val.map((v) => {\n          return _.nestedOmit(v, names);\n        });\n      } else if (typeof val === 'object') {\n        result[key] = _.nestedOmit(val, names);\n      }\n    });\n    return result;\n  },\n});\n\nexport { _ };\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { Model, ModelProperty } from '@okta/courage';\nimport Logger from 'util/Logger';\nimport {\n  FORMS_WITHOUT_SIGNOUT,\n  FORMS_WITH_STATIC_BACK_LINK,\n  FORMS_FOR_VERIFICATION,\n  AUTHENTICATOR_KEY,\n  FORMS,\n} from '../ion/RemediationConstants';\nimport { createOVOptions } from '../ion/ui-schema/ion-object-handler';\nimport { _ } from '../mixins/mixins';\nimport { executeHooksBefore, executeHooksAfter } from 'util/Hooks';\nimport Settings from 'models/Settings';\nimport Hooks from 'models/Hooks';\nimport { RecoverableError } from 'util/OAuthErrors';\nimport { IdxRemediation } from '@okta/okta-auth-js';\nimport BrowserFeatures from 'util/BrowserFeatures';\n\nconst UNKNOWN_USER_I8N_KEY = \"idx.unknown.user\";\n/**\n * Keep track of stateMachine with this special model. Similar to `src/models/AppState.js`\n */\n\nconst local: Record<string, ModelProperty> = {\n  user: 'object',        // optional\n  currentFormName: 'string',\n  idx: 'object',\n  remediations: 'array',\n  dynamicRefreshInterval: 'number',\n  deviceFingerprint: 'string',\n  hooks: 'object' // instance of models/Hooks\n};\n\nconst derived: Record<string, ModelProperty> = {\n  authenticatorProfile: {\n    deps: ['currentAuthenticator', 'currentAuthenticatorEnrollment'],\n    fn(currentAuthenticator = { profile: undefined }, currentAuthenticatorEnrollment = { profile: undefined }) {\n      return currentAuthenticator.profile\n        || currentAuthenticatorEnrollment.profile\n        || {};\n    },\n  },\n  authenticatorKey: {\n    deps: ['currentAuthenticator', 'currentAuthenticatorEnrollment'],\n    fn(currentAuthenticator = { key: undefined }, currentAuthenticatorEnrollment = { key: undefined }) {\n      return currentAuthenticator.key\n        || currentAuthenticatorEnrollment.key\n        || '';\n    },\n  },\n  authenticatorMethodType: {\n    deps: ['currentAuthenticator', 'currentAuthenticatorEnrollment'],\n    fn(currentAuthenticator = { methods: undefined }, currentAuthenticatorEnrollment = { methods: undefined }) {\n      return currentAuthenticator.methods && currentAuthenticator.methods[0].type\n        || currentAuthenticatorEnrollment.methods && currentAuthenticatorEnrollment.methods[0].type\n        || '';\n    },\n  },\n  isPasswordRecovery: {\n    deps: ['recoveryAuthenticator'],\n    fn: function(recoveryAuthenticator = { type: undefined }) {\n      return recoveryAuthenticator?.type === 'password';\n    }\n  }\n};\n\nexport type AppStateProps = typeof local & typeof derived;\n\nexport default class AppState extends Model {\n  settings: Settings;\n  hooks: Hooks;\n  \n  constructor(attributes, options) {\n    super(attributes, options);\n    this.settings = options.settings;\n    this.hooks = options.hooks;\n  }\n\n  get<A extends Backbone._StringKey<AppStateProps>>(attributeName: A): any {\n    return Model.prototype.get.call(this, attributeName);\n  }\n\n  preinitialize(...args) {\n    this.local = local;\n    this.derived = derived;\n    Model.prototype.preinitialize.apply(this, args);\n  }\n\n  isIdentifierOnlyView() {\n    return !this.get('remediations')?.find(({ name }) => name === 'identify')\n      ?.uiSchema?.find(({ name }) => name === 'credentials.passcode');\n  }\n\n  hasRemediationObject(formName) {\n    return this.get('idx').neededToProceed.find((remediation) => remediation.name === formName);\n  }\n\n  hasActionObject(actionName) {\n    return !!this.get('idx')?.actions?.[actionName];\n  }\n\n  getRemediationAuthenticationOptions(formName) {\n    const form = this.hasRemediationObject(formName);\n    if (!form) {\n      return [];\n    }\n    const authenticator = form.value.find((value) => value.name === 'authenticator');\n    let authenticatorOptions = authenticator?.options || [];\n    // OV is a special case, so process OV options\n    authenticatorOptions = [...authenticatorOptions]; //clone it since we are changing it for OV\n    createOVOptions(authenticatorOptions);\n    return authenticatorOptions;\n  }\n\n  getActionByPath(actionPath) {\n    const paths = actionPath.split('.');\n    let targetObject;\n    if (paths.length === 1) {\n      targetObject = this.get('idx').actions;\n    } else {\n      targetObject = this.get(paths.shift());\n    }\n    // Limitation\n    // At the time of writting, action only lives in first level of state objects.\n    const actionName = paths.shift();\n    if (targetObject && _.isFunction(targetObject[actionName])) {\n      return targetObject[actionName];\n    } else {\n      return null;\n    }\n  }\n\n  getCurrentViewState() {\n    const currentFormName = this.get('currentFormName');\n\n    if (!currentFormName) {\n      return;\n    }\n\n    // didn't expect `remediations` is empty. See `setIonResponse`.\n    const currentViewState = this.get('remediations').filter(r => r.name === currentFormName)[0];\n\n    if (!currentViewState) {\n      Logger.error('Panic!!');\n      Logger.error(`\\tCannot find view state for form ${currentFormName}.`);\n      const allFormNames = this.get('remediations').map(r => r.name);\n      Logger.error(`\\tAll available form names: ${allFormNames}`);\n    }\n\n    return currentViewState;\n  }\n\n  /**\n   * Returns ui schema of the form field from current view state\n   * @param {string} fieldName\n   * @returns {}\n   */\n  getSchemaByName(fieldName) {\n    const currentViewState = this.getCurrentViewState();\n    if(currentViewState) {\n      const uiSchema = currentViewState.uiSchema;\n      return uiSchema.find(({ name }) => name === fieldName);\n    }\n  }\n\n  /**\n   * Returns the displayName of the authenticator\n   * @returns {string}\n   */\n  getAuthenticatorDisplayName() {\n    const currentAuthenticator = this.get('currentAuthenticator') || {};\n    const currentAuthenticatorEnrollment = this.get('currentAuthenticatorEnrollment') || {};\n\n    // For enrollment and certain verification flows, the currentAuthenticator object will be present.\n    // If not, we're likely in a traditional verify/challenge flow.\n    return currentAuthenticator.displayName || currentAuthenticatorEnrollment.displayName;\n  }\n\n  /**\n   * Checks to see if we're in an authenticator challenge flow.\n   * @returns {boolean}\n   */\n  isAuthenticatorChallenge() {\n    const currentFormName = this.get('currentFormName');\n    return FORMS_FOR_VERIFICATION.includes(currentFormName);\n  }\n\n  shouldReRenderView(transformedResponse) {\n    if (transformedResponse?.idx?.hasFormError) {\n      return false;\n    }\n\n    const previousRawState = this.has('idx') ? this.get('idx').rawIdxState : null;\n\n    const identicalResponse = _.isEqual(\n      _.nestedOmit(transformedResponse.idx.rawIdxState, ['expiresAt', 'refresh', 'stateHandle', 'headers']),\n      _.nestedOmit(previousRawState, ['expiresAt', 'refresh', 'stateHandle', 'headers']));\n\n    if (identicalResponse) {\n      this.set('dynamicRefreshInterval', this.getRefreshInterval(transformedResponse));\n    }\n\n    return this._isReRenderRequired(identicalResponse, transformedResponse, previousRawState);\n  }\n\n  getRefreshInterval(transformedResponse) {\n    // Only polling refresh interval has changed in the response,\n    // make sure to update the correct poll view's refresh value\n    const currentFormName = this.get('currentFormName');\n    const currentViewState = transformedResponse.remediations.filter(r => r.name === currentFormName)[0];\n    // Get new refresh interval for either: remediations, authenticator, or authenticator enrollment\n    return currentViewState.refresh ||\n      transformedResponse.currentAuthenticatorEnrollment?.poll?.refresh ||\n      transformedResponse.currentAuthenticator?.poll?.refresh;\n  }\n\n  // Sign Out link will be displayed in the footer of a form, unless:\n  // - widget configuration set hideSignOutLinkInMFA or mfaOnlyFlow to true\n  // - cancel remediation form is not present in the response\n  // - form is part of our list FORMS_WITHOUT_SIGNOUT\n  shouldShowSignOutLinkInCurrentForm(hideSignOutLinkInMFA) {\n    const idxActions = this.get('idx') && this.get('idx').actions;\n    const currentFormName = this.get('currentFormName');\n\n    return !hideSignOutLinkInMFA\n      && _.isFunction(idxActions?.cancel)\n      && !FORMS_WITHOUT_SIGNOUT.includes(currentFormName);\n  }\n\n  containsMessageWithI18nKey(keys) {\n    if (!Array.isArray(keys)) {\n      keys = [keys];\n    }\n    const messagesObjs = this.get('messages');\n    return messagesObjs && Array.isArray(messagesObjs.value)\n      && messagesObjs.value.some(messagesObj => _.contains(keys, messagesObj.i18n?.key));\n  }\n\n  containsMessageStartingWithI18nKey(keySubStr) {\n    const messagesObjs = this.get('messages');\n    return messagesObjs && Array.isArray(messagesObjs.value)\n      && messagesObjs.value.some(messagesObj => messagesObj.i18n?.key.startsWith(keySubStr));\n  }\n\n  clearAppStateCache() {\n    // clear appState before setting new values\n    const attrs = {};\n    for (const key in this.attributes) {\n      if (key !== 'currentFormName') {\n        attrs[key] = void 0;\n      }\n    }\n    this.set(attrs, Object.assign({}, { unset: true, silent: true }));\n    // clear cache for derived props.\n    this.trigger('cache:clear');\n  }\n\n  chooseRemediation(transformedResponse): IdxRemediation | undefined {\n    if (_.isEmpty(transformedResponse.remediations)) {\n      return;\n    }\n\n    const firstRemediation = transformedResponse.remediations[0];\n\n    // Special case: Okta Verify: show select enrollment channel instead of QR code on mobile\n    if (firstRemediation.name === 'enroll-poll'\n      && this.get('authenticatorKey') === AUTHENTICATOR_KEY.OV\n      && (BrowserFeatures.isAndroid() || BrowserFeatures.isIOS())\n      && transformedResponse.currentAuthenticator?.contextualData?.selectedChannel === 'qrcode'\n    ) {\n        return transformedResponse.remediations.find(r => r.name === 'select-enrollment-channel')\n    }\n\n    // Default case: return the first remediation in the list\n    return firstRemediation;\n  }\n\n  async setIonResponse(transformedResponse) {\n    const doRerender = this.shouldReRenderView(transformedResponse);\n    this.clearAppStateCache();\n    // set new app state properties\n    this.set(transformedResponse);\n\n    if (doRerender) {\n      const remediation = this.chooseRemediation(transformedResponse);\n      let currentFormName = null;\n      if (remediation) {\n        currentFormName = remediation.name;\n      } else {\n        Logger.error('Panic!!');\n        Logger.error('\\tNo remediation found.');\n        Logger.error('\\tHere is the entire response');\n        Logger.error(JSON.stringify(transformedResponse, null, 2));\n      }\n\n      const hook = this.hooks?.getHook(currentFormName); // may be undefined\n      await executeHooksBefore(hook);\n  \n      this.unset('currentFormName', { silent: true });\n      // make sure change `currentFormName` is last step.\n      // change `currentFormName` will re-render FormController,\n      // which may depend on other derived properties hence\n      // those derived properties must be re-computed before\n      // re-rendering controller.\n      this.set({ currentFormName });\n\n      await executeHooksAfter(hook);\n    }\n  }\n\n  setNonIdxError(error: RecoverableError<any>) {\n    this.set('remediations', [{ name: FORMS.TERMINAL }]);\n    this.set('messages', { value: [\n      {\n        message: error.errorDetails.errorSummary,\n        class: 'ERROR'\n      }\n    ]})\n    this.set('currentFormName', FORMS.TERMINAL);\n  }\n\n  getUser() {\n    return this.get('user');\n  }\n\n  _isReRenderRequired(identicalResponse, transformedResponse, previousRawState) {\n    let reRender = true;\n\n    const isPreviousStateError = this.get('idx')?.hasFormError;\n    if (isPreviousStateError && this._isChallengeAuthenticatorPoll(transformedResponse, previousRawState)) {\n      reRender = false;\n    }\n\n    if (identicalResponse) {\n      /**\n       * returns false: When new response is same as last.\n       * usually happens during polling when pipeline doesn't proceed to next step.\n       * expiresAt will be different for each response, hence compare objects without that property\n       */\n      reRender = false;\n      if (this.get('currentFormName') === 'poll') {\n        /**\n         * returns true: We want to force reRender when currentForm is poll because request has to reinitiate\n         * based on new refresh and UI has to reflect new timer.\n         * We dont technical poll here we just make a request after the specified refresh time each time\n         * we get a new response.\n         */\n        reRender = true;\n      } else if (FORMS_WITH_STATIC_BACK_LINK.includes(this.get('currentFormName'))) {\n        /**\n         * returns true: We want to force reRender if you go back to selection screen from challenge or enroll screen\n         * and re-select the same authenticator for challenge. In this case also new response will be identical\n         * to the old response.\n         */\n        reRender = true;\n      } else if (this.containsMessageWithI18nKey(UNKNOWN_USER_I8N_KEY)) {\n        /**\n         * Need to re-render or else form will be stuck in saving mode.\n         * This message is a form warning that can result in identical responses if the user enters the same\n         * username as the one in the last message warning.\n         */\n        reRender = true;\n      }\n    }\n\n    return reRender;\n  }\n\n  /**\n   * This is to account for the edge case introduced by this issue: OKTA-419210. With the current idx remediations,\n   * there's no good way to generalize this as the backend handles the authenticators for phone, sms and \n   * email differently. Although not ideal, we have to keep this check in for now until we find a better solution.\n   */\n  _isChallengeAuthenticatorPoll(transformedResponse, previousRawState) {\n    const isSameExceptMessages = _.isEqual(\n      _.nestedOmit(transformedResponse.idx.rawIdxState, ['expiresAt', 'refresh', 'stateHandle', 'headers']),\n      _.nestedOmit(previousRawState, ['expiresAt', 'refresh', 'stateHandle', 'messages', 'headers']));\n\n    const isChallengeAuthenticator = this.get('currentFormName') === 'challenge-authenticator';\n    const isCurrentAuthenticatorEmail = this.get('currentAuthenticatorEnrollment')?.key === AUTHENTICATOR_KEY.EMAIL;\n\n    return isSameExceptMessages && isChallengeAuthenticator && isCurrentAuthenticatorEmail;\n  }\n}\n","/*!\n * Copyright (c) 2021, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nconst STATE_HANDLE_SESSION_STORAGE_KEY = 'osw-oie-state-handle';\nconst LAST_INITIATED_LOGIN_URL_SESSION_STORAGE_KEY = 'osw-oie-last-initiated-login-url';\nconst RESEND_TIMESTAMP_SESSION_STORAGE_KEY = 'osw-oie-resend-timestamp';\n\nconst removeStateHandle = () => {\n  sessionStorage.removeItem(STATE_HANDLE_SESSION_STORAGE_KEY);\n  sessionStorage.removeItem(LAST_INITIATED_LOGIN_URL_SESSION_STORAGE_KEY);\n};\nconst setStateHandle = (token) => {\n  sessionStorage.setItem(STATE_HANDLE_SESSION_STORAGE_KEY, token);\n  sessionStorage.setItem(LAST_INITIATED_LOGIN_URL_SESSION_STORAGE_KEY, window.location.href);\n};\nconst getStateHandle = () => {\n  return sessionStorage.getItem(STATE_HANDLE_SESSION_STORAGE_KEY);\n};\nconst getLastInitiatedLoginUrl = () => {\n  return sessionStorage.getItem(LAST_INITIATED_LOGIN_URL_SESSION_STORAGE_KEY);\n};\nconst removeResendTimestamp = () => {\n  sessionStorage.removeItem(RESEND_TIMESTAMP_SESSION_STORAGE_KEY);\n};\nconst setResendTimestamp = (token) => {\n  sessionStorage.setItem(RESEND_TIMESTAMP_SESSION_STORAGE_KEY, token);\n};\nconst getResendTimestamp = () => {\n  return sessionStorage.getItem(RESEND_TIMESTAMP_SESSION_STORAGE_KEY);\n};\n\n\nexport default {\n  removeStateHandle,\n  setStateHandle,\n  getStateHandle,\n  getLastInitiatedLoginUrl,\n  removeResendTimestamp,\n  setResendTimestamp,\n  getResendTimestamp\n};\n","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nconst CONFIGURED_FLOW = {\n  DEFAULT: 'default',\n  PROCEED: 'proceed',\n  LOGIN: 'login',\n  REGISTRATION: 'signup',\n  RESET_PASSWORD: 'resetPassword',\n  UNLOCK_ACCOUNT: 'unlockAccount',\n};\n\nexport {\n  CONFIGURED_FLOW,\n};","/*!\n * Copyright (c) 2021, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { ConfiguredFlowError, ConfigError } from 'util/Errors';\nimport { emailVerifyCallback } from './emailVerifyCallback';\nimport sessionStorageHelper from './sessionStorageHelper';\nimport { CONFIGURED_FLOW } from './constants';\nimport { IdxTransactionMeta, ProceedOptions } from '@okta/okta-auth-js';\n\nconst handleProxyIdxResponse = async (settings) => {\n  return Promise.resolve({\n    rawIdxState: settings.get('proxyIdxResponse'),\n    context: settings.get('proxyIdxResponse'),\n    neededToProceed: [],\n  });\n};\n\n/* eslint max-depth: [2, 3] */\n// eslint-disable-next-line complexity, max-statements\nexport async function startLoginFlow(settings) {\n  const authClient = settings.getAuthClient();\n  // nonce is not a top-level auth-js option, must be passed in manually\n  const { authParams } = settings.toJSON({verbose: true});\n  const nonce = settings.get('nonce') || authParams?.nonce;\n  const idxOptions: ProceedOptions = {\n    exchangeCodeForTokens: false, // we handle this in interactionCodeFlow.js\n    ...(nonce && { nonce })\n  };\n\n  // Return a preset response\n  if (settings.get('proxyIdxResponse')) {\n    return handleProxyIdxResponse(settings);\n  }\n\n  if (settings.get('overrideExistingStateToken')) {\n    sessionStorageHelper.removeStateHandle();\n  }\n\n  if (settings.get('otp')) {\n    return emailVerifyCallback(settings);\n  }\n\n  if (settings.get('oauth2Enabled')) {\n    const meta: IdxTransactionMeta = await authClient.idx.getSavedTransactionMeta();\n    if (!meta) {\n      // no saved transaction\n      // if the configured flow is set to `proceed`, the SIW should only continue an existing idx transaction\n      // if the SIW loads from a fresh state (there is no current transaction), throw an error\n      const flow = authClient.idx.getFlow();\n      if (flow && flow === CONFIGURED_FLOW.PROCEED) {\n        throw new ConfiguredFlowError(\n          'Unable to proceed: saved transaction could not be loaded', flow\n        );\n      }\n      // start new transaction\n      return authClient.idx.start(idxOptions); // calls interact\n    }\n\n    // continue saved transaction\n    return authClient.idx.proceed(idxOptions); // calls introspect\n  }\n\n  // Use stateToken from session storage if exists\n  // See more details at ./docs/use-session-token-prior-to-settings.png\n  const stateHandleFromSession = sessionStorageHelper.getStateHandle();\n  if (stateHandleFromSession) {\n    try {\n      const idxResp = await authClient.idx.start({\n        ...idxOptions,\n        stateHandle: stateHandleFromSession\n      });\n      const hasError = idxResp.context?.messages?.value.length > 0;\n      if (hasError) {\n        throw new Error('saved stateToken is invalid'); // will be caught in this function\n      }\n\n      // 1. abandon the settings.stateHandle given session.stateHandle is still valid\n      settings.set('stateToken', stateHandleFromSession);\n      // 2. chain the idxResp to next handler\n      return idxResp;\n    } catch {\n      // 1. remove session.stateHandle\n      sessionStorageHelper.removeStateHandle();\n      // 2. start the login again in order to introspect on settings.stateHandle\n      return startLoginFlow(settings);\n    }\n  }\n\n  // Use stateToken from options\n  const stateHandle = settings.get('stateToken');\n  if (stateHandle) {\n    return authClient.idx.start({\n      ...idxOptions,\n      stateHandle\n    });\n  }\n\n  throw new ConfigError('Invalid OIDC configuration. Set \"clientId\" and \"redirectUri\" in the widget options.');\n}\n","/*!\n * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { ProceedOptions } from '@okta/okta-auth-js';\n\nexport async function emailVerifyCallback(settings) {\n  const authClient = settings.getAuthClient();\n  const idxOptions: ProceedOptions = {\n    exchangeCodeForTokens: false, // we handle this in interactionCodeFlow.js\n  };\n  const meta = await authClient.idx.getSavedTransactionMeta(); // meta can load in another tab using state if it matches\n  if (!meta || !meta.interactionHandle) {\n    // Flow can not continue in this tab. Create a synthetic server response and use it to display a message to the user\n    const messages = {\n      type: 'array',\n      value: [\n        // terminal-return-otp-only-no-location.json\n        {\n          'message': 'Enter the OTP in your original browser or device.',\n          'i18n': {\n            'key': 'idx.enter.otp.in.original.tab'\n          },\n          'class': 'INFO'\n        }\n      ]\n    };\n\n    const resp = {\n      neededToProceed: [],\n      // OKTA-382410 so bad that has to leverage rawIdxState\n      rawIdxState: {\n        messages,\n      },\n      context: {\n        messages,\n      }\n    };\n    return resp;\n  }\n  \n  // Proceed using the OTP code\n  const otp = settings.get('otp');\n  const idxResponse = await authClient.idx.proceed({\n    ...idxOptions,\n    otp\n  });\n  return idxResponse;\n}\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _ } from '@okta/courage';\nimport { FORMS as RemediationForms, AUTHENTICATOR_KEY, IDP_FORM_TYPE } from './RemediationConstants';\n\n/**\n * Transform the ion spec response into canonical format.\n */\n\n/**\n * Authn V2 response\n * @typedef {Object} AuthnResponse\n */\n\n/**\n * @typedef {Object} AuthnResult\n * @property {Object=} user\n * @property {Object=} authenticator\n */\n\nconst isObject = x => _.isObject(x);\n\nconst isError = response => !!response.messages;\n\n/**\n * Flatten first level objects from response\n */\nconst getFirstLevelObjects = (resp) => {\n  const result = {};\n  _.each(resp, (val = {}, key) => {\n    // if key is remediation we don't do any transformation\n    if (key === 'remediation') {\n      return;\n    }\n\n    // for arrays we just want it as a top level object\n    // Example authenticators array in select-authenticator form\n    if (val.type === 'array') {\n      result[key] = {\n        value: val.value,\n      };\n    }\n\n    // for handling attributes with type object\n    if (val.type === 'object') {\n      result[key] = val.value;\n    }\n  });\n  return result;\n};\n\nconst getRemediationValues = (idx) => {\n  const remediationValues = [];\n  const hasSkipRemediationOnly =\n    idx.neededToProceed.length === 1 && idx.neededToProceed[0].name === 'skip';\n  if (_.isEmpty(idx.neededToProceed) || hasSkipRemediationOnly) {\n    // no remediation or only skip remediation with success\n    if (idx.context.success) {\n      remediationValues.push({\n        name: idx.context.success.name,\n        href: idx.context.success.href,\n        value: [],\n      });\n    } else if (idx.context.messages) {\n      // no remediation or only skip remediation with messages\n      remediationValues.push({\n        name: RemediationForms.TERMINAL,\n        // Using `value` is unnecessary as `messages` will be display via `TerminalView.showMessages`,\n        // even though might sound a little counterintuitive.\n        // The reason being is there is `BaseForm.showMessages` that is intended to handle\n        // messages generically.\n        value: [],\n      });\n    } else if (idx.context.deviceEnrollment) {\n      // no remediation or only skip remediation with messages for device enrollment state\n      // and the state is meant to be terminal state with different UI than the regular terminal view\n      remediationValues.push({\n        name: RemediationForms.DEVICE_ENROLLMENT_TERMINAL,\n        value: [],\n      });\n    }\n  }\n  return {\n    remediations: [\n      ...remediationValues,\n      ...idx.neededToProceed,\n    ]\n  };\n};\n\n/**\n * To support `idps` configuration in OIE.\n * https://github.com/okta/okta-signin-widget#openid-connect\n */\nconst injectIdPConfigButtonToRemediation = (settings, idxResp) => {\n  const widgetRemedations = idxResp.remediations;\n  const hasIdentifyRemedation = widgetRemedations.filter(r => r.name === 'identify');\n  if (hasIdentifyRemedation.length === 0) {\n    return idxResp;\n  }\n\n  const idpsConfig = settings.get('idps');\n  if (Array.isArray(idpsConfig)) {\n    const existsRedirectIdpIds = {};\n    widgetRemedations.forEach(r => {\n      if (r.name === RemediationForms.REDIRECT_IDP && r.idp) {\n        existsRedirectIdpIds[r.idp.id] = true;\n      }\n    });\n    const baseUrl = settings.get('baseUrl');\n    const stateHandle = idxResp.idx.context.stateHandle;\n    const redirectIdpRemedations = idpsConfig\n      .filter(c => !existsRedirectIdpIds[c.id]) // omit idps that are already in remediation.\n      .map(idpConfig => {\n        const idp = {\n          id: idpConfig.id,\n          name: idpConfig.text,\n        };\n        const redirectUri = `${baseUrl}/sso/idps/${idpConfig.id}?stateToken=${stateHandle}`;\n        if (idpConfig.className) {\n          idp.className = idpConfig.className;\n        }\n        return {\n          name: RemediationForms.REDIRECT_IDP,\n          type: idpConfig.type,\n          idp,\n          href: redirectUri,\n        };\n      });\n    idxResp.remediations = widgetRemedations.concat(redirectIdpRemedations);\n  }\n\n  return idxResp;\n};\n\n/**\n * IFF there is one `redirect-idp` remediation form, widget will automatically redirect to `redirect-idp.href`.\n *\n * The idea now is to reuse `success-redirect` thus converts `redirect-idp` to `success-redirect` form.\n */\nconst convertRedirectIdPToSuccessRedirectIffOneIdp = (settings, result, lastResult) => {\n  if (Array.isArray(result.remediations)) {\n    const redirectIdpRemediations = result.remediations.filter(idp => idp.name === RemediationForms.REDIRECT_IDP);\n    if (redirectIdpRemediations.length !== 1 || result.remediations.length !== 1) {\n      return;\n    }\n\n    // Direct auth clients should not redirect on the initial response\n    const isDirectAuth = settings.get('oauth2Enabled');\n    if (isDirectAuth && !lastResult) {\n      return;\n    }\n\n    const successRedirect = {\n      name: RemediationForms.SUCCESS_REDIRECT,\n      href: redirectIdpRemediations[0].href,\n      value: [],\n    };\n    result.remediations = [successRedirect];\n  }\n};\n\n/**\n * API reuses `redirect-idp` remediation form for PIV IdP and IdP Authenticator.\n * IdP Authenticator becomes outlier comparing with other Authenticators in terms of\n * using `challenge-authenticator` and `enroll-authenticator` remediation form.\n * The UX for PIV IdP is different from other idps in terms of the PIV\n * instructions view that needs to be rendered before we redirect to mtls.\n *\n * This function changes `redirect-idp` to `challenge-authenticator` or `enroll-authenticator`\n * for IdP Authenticator and changes `redirect-idp` to `piv-idp` for PIV IdP.\n */\nconst modifyFormNameForIdP = result => {\n  if (Array.isArray(result.remediations)) {\n    result.remediations.forEach(remediation => {\n      if (remediation.name === RemediationForms.REDIRECT_IDP &&\n          remediation?.relatesTo?.value?.key === AUTHENTICATOR_KEY.IDP) {\n        // idp authenticator\n        const isVerifyFlow = Object.prototype.hasOwnProperty.call(result, 'currentAuthenticatorEnrollment');\n        remediation.name = isVerifyFlow ? 'challenge-authenticator' : 'enroll-authenticator';\n      }\n      if (remediation.name === RemediationForms.REDIRECT_IDP && remediation.type === IDP_FORM_TYPE.X509) {\n        // piv idp\n        remediation.name = RemediationForms.PIV_IDP;\n      }\n    });\n  }\n};\n\nconst isFailureRedirect = (result) => {\n  const context = result.idx.context;\n  return (context.failure && context.failure.name === 'failure-redirect');\n};\n\nconst handleFailureRedirect = (settings, result) => {\n  const context = result.idx.context;\n\n  // Direct auth clients will usually prefer to display the error instead of redirecting\n  const isDirectAuth = settings.get('oauth2Enabled');\n  const alwaysRedirect = settings.get('redirect') === 'always'; // redirect option overrides default behavior\n  if (isDirectAuth && !alwaysRedirect) {\n    return;\n  }\n  \n  const failureRedirect = {\n    name: RemediationForms.FAILURE_REDIRECT,\n    href: context.failure.href,\n    value: [],\n  };\n  result.remediations = [failureRedirect];\n};\n\n/**\n * @param {Models.Settings} user configuration\n * @param {idx} idx object\n * @returns {} transformed object with flattened firstlevel objects, idx and remediations array\n * Example: {\n *  idx: {\n *    proceed: Æ’(),\n *    neededToProceed: [],\n *    actions: {cancel: Æ’()},\n *    context: {},\n *  },\n *  remediations: [],\n *  authenticators: {},\n *  authenticator: {},\n *  messages: {},\n *  deviceEnrollment: {},\n * }\n */\nconst convert = (settings, idx = {}, lastResult = null) => {\n  if (!isObject(idx.rawIdxState)) {\n    return null;\n  }\n\n  // build result object\n  const firstLevelObjects = getFirstLevelObjects(idx.rawIdxState);\n  const remediationValues = getRemediationValues(idx);\n  const result = Object.assign({},\n    firstLevelObjects,\n    remediationValues,\n    { idx }\n  );\n  \n  // transform result object\n  if (isError(result) && isFailureRedirect(result)) {\n    handleFailureRedirect(settings, result);\n  }\n\n  // Override the `result` to handle custom IdP login buttons\n  // and update the form for IdP Authenticators.\n  injectIdPConfigButtonToRemediation(settings, result);\n  modifyFormNameForIdP(result);\n\n  if (!isError(result)) { // Only redirect to the IdP if we are not in an error flow\n    convertRedirectIdPToSuccessRedirectIffOneIdp(settings, result, lastResult);\n  }\n\n  return result;\n};\n\nexport default convert;\n","export default {\n  GMT: 'UTC',\n  WET: 'WET',\n  CET: 'CET',\n  MET: 'CET',\n  ECT: 'CET',\n  EET: 'EET',\n  MIT: 'Pacific/Apia',\n  HST: 'Pacific/Honolulu',\n  AST: 'America/Anchorage',\n  PST: 'America/Los_Angeles',\n  MST: 'America/Denver',\n  PNT: 'America/Phoenix',\n  CST: 'America/Chicago',\n  EST: 'America/New_York',\n  IET: 'America/Indiana/Indianapolis',\n  PRT: 'America/Puerto_Rico',\n  CNT: 'America/St_Johns',\n  AGT: 'America/Argentina/Buenos_Aires',\n  BET: 'America/Sao_Paulo',\n  ART: 'Africa/Cairo',\n  CAT: 'Africa/Harare',\n  EAT: 'Africa/Addis_Ababa',\n  NET: 'Asia/Yerevan',\n  PLT: 'Asia/Karachi',\n  IST: 'Asia/Kolkata',\n  BST: 'Asia/Dhaka',\n  VST: 'Asia/Ho_Chi_Minh',\n  CTT: 'Asia/Shanghai',\n  JST: 'Asia/Tokyo',\n  ACT: 'Australia/Darwin',\n  AET: 'Australia/Sydney',\n  SST: 'Pacific/Guadalcanal',\n  NST: 'Pacific/Auckland',\n};\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/* eslint max-depth: [2, 3] */\n/* eslint complexity: [2, 20] */\nimport { loc } from '@okta/courage';\nimport { HINTS, ATTR_FORMAT } from '../RemediationConstants';\nimport CountryUtil from 'util/CountryUtil';\nimport TimeZone from '../../view-builder/utils/TimeZone';\n\nconst ionOptionsToUiOptions = (options) => {\n  const result = {};\n  options.forEach(({ value, label }) => {\n    result[value] = label;\n  });\n  return result;\n};\n\nconst getPasswordUiSchema = (settings) => ({\n  type: 'password',\n  params: {\n    showPasswordToggle: settings.get('showPasswordToggle'),\n  },\n});\n\nconst getCaptchaUiSchema = () => {\n  return {\n    type: 'captcha',\n  };\n};\n\nconst timezoneUISchema = {\n  type: 'select',\n  wide: true\n};\n\nconst shouldRenderAsRadio = (name) => name.indexOf('methodType') >= 0 || name.indexOf('channel') >= 0;\n\nconst optionalType = ['text', 'radio', 'select'];\n\nconst populateUISchemaForDisplay = (uiSchema, ionField) => {\n  const display = ionField?.value?.value;\n  uiSchema.type = display.inputType;\n  if (display.inputType === 'radio') {\n    uiSchema.options = display.options;\n  } else if (display.inputType === 'select') {\n    uiSchema.wide = true;\n    if (display.format === ATTR_FORMAT.COUNTRY_CODE) {\n      uiSchema.options = Object.assign({'': ''}, CountryUtil.getCountryCode());\n    } else {\n      //it will create a placeholder for dropdowns, by default it will show 'Select an Option'\n      uiSchema.options = Object.assign({'': ''}, ionOptionsToUiOptions(display.options));\n    }\n  }\n};\n\nconst populateUISchemaForRadio = (uiSchema, ionFormField) => {\n  // e.g. { name: 'methodType', options: [ {label: 'sms'} ], type: 'string' | null }\n  uiSchema.type = 'radio';\n  // set the default value to the first value.\n  ionFormField.value = ionFormField.options[0].value;\n};\n\nconst createUiSchemaForString = (ionFormField, remediationForm, transformedResp, createUISchema, settings) => {\n  const uiSchema = {\n    type: 'text'\n  };\n\n  // e.g. { name: 'password', secret: true }\n  if (ionFormField.secret === true) {\n    Object.assign(uiSchema, getPasswordUiSchema(settings));\n  }\n\n  if (ionFormField.hint === HINTS.CAPTCHA) {\n    Object.assign(uiSchema, getCaptchaUiSchema());\n  }\n\n  if(ionFormField.name === 'userProfile.timezone'){\n    Object.assign(uiSchema, timezoneUISchema);\n    uiSchema.options = Object.assign({'': ''}, TimeZone);\n  }\n\n  if (Array.isArray(ionFormField.options) && ionFormField.options[0] && ionFormField.options[0].value) {\n    const ionField = ionFormField.options[0];\n    if (ionField.label === 'display') {\n      populateUISchemaForDisplay(uiSchema, ionField);\n    } else if (shouldRenderAsRadio(ionFormField.name)) {\n      populateUISchemaForRadio(uiSchema, ionFormField);\n    } else {\n      // default to select (dropdown). no particular reason (certainly can default to radio.)\n      // e.g. { name: 'questionKey', options: [], type: 'string' | null }\n      uiSchema.type = 'select';\n      uiSchema.wide = true;\n      uiSchema.options = ionOptionsToUiOptions(ionFormField.options);\n    }\n  }\n\n  // set a label as 'Optional' for supported optional element types\n  if(ionFormField.required === false && optionalType.includes(uiSchema.type)) {\n    uiSchema.sublabel = loc('oie.form.field.optional', 'login');\n  }\n\n  return uiSchema;\n};\n\nexport default createUiSchemaForString;\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/**\n * Create UI Schema into remedation object base on remediation values\n */\nimport { _ } from '@okta/courage';\nimport createUiSchemaForBoolean from './ui-schema/ion-boolean-handler';\nimport createUiSchemaForObject from './ui-schema/ion-object-handler';\nimport createUiSchemaForString from './ui-schema/ion-string-handler';\n\nconst UISchemaHandlers = {\n  string: createUiSchemaForString,\n  boolean: createUiSchemaForBoolean,\n  object: createUiSchemaForObject,\n};\n\n/**\n *\n * @param {AuthResult} transformedResp\n * @param {IONForm} remeditationForm\n */\nconst createUISchema = (transformedResp, remediationForm, settings) => {\n\n  // For cases where field itself is a form, it has a formname and we are appending the formname to each field.\n  // Sort of flat the structure in order to align Courage flatten Model. The flatten structure will be converted\n  // back to object hierarchy through `Model.toJSON`.\n  // For simplicity we are assuming that when field itself is a form its only one level deep.\n  const remediationValue = _.chain(remediationForm.value || [])\n    .filter(v => v.visible !== false)\n    .map(v => {\n      let nestedForm;\n      if (v.form) {\n        nestedForm = v.form;\n      } else if (v.value?.form) {\n        nestedForm = v.value.form;\n      }\n\n      if (nestedForm) {\n        const inputGroupName = v.name;\n        return nestedForm.value.map(input => {\n          return Object.assign({}, input, { name: inputGroupName + '.' + input.name });\n        });\n      } else {\n        return v;\n      }\n    })\n    .flatten()\n    .value();\n\n  return remediationValue.map(ionFormField => {\n    const uiSchemaDefaultConfig = {\n      'label-top': true,\n      'multirowError': true,\n      'data-se': `o-form-fieldset-${ionFormField.name}`,\n    };\n    const fieldType = ionFormField.type || 'string';\n    const uiSchemaHandler = UISchemaHandlers[fieldType];\n    const uiSchemaResult = uiSchemaHandler(ionFormField, remediationForm, transformedResp, createUISchema, settings);\n\n    return Object.assign(\n      {},\n      ionFormField,\n      uiSchemaDefaultConfig,\n      uiSchemaResult,\n    );\n  });\n};\n\n/**\n *\n * @param {AuthResult} transformedResp\n */\nconst insertUISchema = (settings, transformedResp) => {\n  if (transformedResp) {\n    transformedResp.remediations = transformedResp.remediations.map(obj => {\n      obj.uiSchema = createUISchema(transformedResp, obj, settings);\n      return obj;\n    });\n  }\n  return transformedResp;\n};\n\nexport default insertUISchema;\n\n/**\n * @typedef {Object} Authenticator\n * @property {string} label\n * @property {AuthenticatorValue} value\n */\n/**\n * @typedef {Object} AuthenticatorValue\n * @property {string} type Authenticator Type\n * @property {string} id Authenticator Org Authenticator ID\n * @property {AuthenticatorMethod[]} methods\n */\n/**\n * @typedef {Object} AuthenticatorEnrollment\n * @property {string} label\n * @property {AuthenticatorEnrollmentValue} value\n */\n/**\n * @typedef {Object} AuthenticatorEnrollmentValue\n * @property {string} authenticatorId Org Authenticator ID\n * @property {string} type Authenticator Type\n * @property {string} id Authenticator Enrollment ID\n * @property {AuthenticatorMethod[]} methods\n */\n/**\n * @typedef {Object} AuthenticatorMethod\n * @property {string} type Authenticator method type\n */\n/**\n * @typedef {Object} AuthenticatorOption\n * @property {string} label\n * @property {Object} form\n * @property {AuthenticatorOption[]} form.value\n */\n/**\n * @typedef {Object} AuthenticatorOptionValue\n * @property {string} name\n * @property {boolean} required\n * @property {string} value\n * @property {boolean} mutable\n */\n/**\n * @typedef {Object} IONForm\n * @property {string} name\n * @property {string[]} rel\n * @property {string} method\n * @property {string} href\n * @property {string} accepts\n * @property {IONFormField[]} value\n */\n/**\n * @typedef {Object} IONFormField\n * @property {string} name\n * @property {string=} type\n * @property {string=} required\n * @property {string=} secret\n * @property {string=} label\n * @property {Object[]} options\n * @property {Object=} form\n * @property {IONFormField[]} form.value\n */\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { FORMS } from '../RemediationConstants';\nimport { loc } from '@okta/courage';\n\nconst getCheckboxUiSchema = ({ label, type, required }) => ({\n  // For Remember Me checkbox, we need the label only on the right side of it.\n  placeholder: label,\n  label: false,\n  // Separating prop type for Backbone.Model\n  // from html input type\n  modelType: type,\n  // uiSchema type is the html input type desired.\n  type: 'checkbox',\n  required: required || false,\n});\n\nconst getRadioUiSchema = ({ label, required, options }) => ({\n  displayName: label,\n  type: 'radio',\n  required: required,\n  options: options[0].value.value.options,\n  sublabel: required? null : loc('oie.form.field.optional', 'login'),\n});\n\nconst getCheckboxUiSchemaWithDefaultValue = ({ label, type }) => ({\n  placeholder: label,\n  label: false,\n  modelType: type,\n  type: 'checkbox',\n  // set required true so default value can be passed to optional attributes as well\n  required: true,\n  value: false,\n});\n\nconst createUiSchemaForBoolean = (ionFormField, remediationForm) => {\n  if ([FORMS.CONSENT_ENDUSER, FORMS.CONSENT_ADMIN].includes(remediationForm.name)) {\n    const scopes = remediationForm.scopes.map(({name, label, desc}) => {\n      return {name, displayName: label, description: desc};\n    });\n\n    // setting 'type' here to add a specific View in FormInputFactory.create\n    const type = remediationForm.name;\n\n    return {type, scopes, options: ionFormField.options};\n  } else if (Array.isArray(ionFormField.options) && ionFormField.options[0]?.value?.value?.inputType === 'radio') {\n    return getRadioUiSchema(ionFormField);\n  } else if (Array.isArray(ionFormField.options) && ionFormField.options[0]?.value?.value?.inputType === 'checkbox') {\n    return getCheckboxUiSchemaWithDefaultValue(ionFormField);\n  } else {\n    return getCheckboxUiSchema(ionFormField);\n  }\n};\n\nexport default createUiSchemaForBoolean;\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { loc, _ } from '@okta/courage';\nimport FactorUtil from 'util/FactorUtil';\nimport { AUTHENTICATOR_KEY } from '../../ion/RemediationConstants';\n\nconst { getPasswordComplexityDescriptionForHtmlList } = FactorUtil;\n\nconst getButtonDataSeAttr = function(authenticator) {\n  if (authenticator.authenticatorKey) {\n    const method = authenticator.value?.methodType ?\n      '-' + authenticator.value?.methodType : '';\n    return authenticator.authenticatorKey + method;\n  }\n  return '';\n};\n\n/* eslint complexity: [0, 0], max-statements: [2, 25] */\nconst getAuthenticatorData = function(authenticator, isVerifyAuthenticator) {\n  const authenticatorKey = authenticator.authenticatorKey;\n  const key = _.isString(authenticatorKey) ? authenticatorKey.toLowerCase() : '';\n  let authenticatorData = {};\n  let nicknameText = isVerifyAuthenticator ? authenticator.relatesTo?.nickname : undefined;\n  switch (key) {\n  case AUTHENTICATOR_KEY.EMAIL:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.email.authenticator.description', 'login'),\n      iconClassName: 'mfa-okta-email',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.PASSWORD:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.password.authenticator.description', 'login'),\n      iconClassName: 'mfa-okta-password',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.PHONE:\n    Object.assign(authenticatorData, {\n      nickname: nicknameText,\n      description: isVerifyAuthenticator\n        ? authenticator.relatesTo?.profile?.phoneNumber\n        : loc('oie.phone.authenticator.description', 'login'),\n      iconClassName: 'mfa-okta-phone',\n      noTranslateClassName: isVerifyAuthenticator ? 'no-translate' : '',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.SECURITY_QUESTION:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.security.question.authenticator.description', 'login'),\n      iconClassName: 'mfa-okta-security-question',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.WEBAUTHN:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.webauthn.description', 'login'),\n      iconClassName: 'mfa-webauthn',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.OV:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? loc('oie.okta_verify.label', 'login')\n        : loc('oie.okta_verify.authenticator.description', 'login'),\n      iconClassName: 'mfa-okta-verify',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.GOOGLE_OTP:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.google_authenticator.authenticator.description', 'login'),\n      iconClassName: 'mfa-google-auth',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.ON_PREM: {\n    const vendorName =  authenticator.relatesTo?.displayName ||\n      loc('oie.on_prem.authenticator.default.vendorName', 'login');\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.on_prem.authenticator.description', 'login', [vendorName]),\n      iconClassName: 'mfa-onprem',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n  }\n\n  case AUTHENTICATOR_KEY.RSA:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.rsa.authenticator.description', 'login'),\n      iconClassName: 'mfa-rsa',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.DUO:\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.duo.authenticator.description', 'login'),\n      iconClassName: 'mfa-duo',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n\n  case AUTHENTICATOR_KEY.IDP: {\n    const idpName =  authenticator.relatesTo?.displayName;\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.idp.authenticator.description', 'login', [idpName]),\n      iconClassName: 'mfa-custom-factor',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n  }\n  case AUTHENTICATOR_KEY.CUSTOM_OTP: {\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.custom_otp.description', 'login'),\n      iconClassName: 'mfa-hotp',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n  }\n\n  case AUTHENTICATOR_KEY.SYMANTEC_VIP: {\n    const appName =  authenticator.relatesTo?.displayName;\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.symantecVip.authenticator.description', 'login', [appName]),\n      iconClassName: 'mfa-symantec',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n  }\n\n  case AUTHENTICATOR_KEY.YUBIKEY: {\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''\n        : loc('oie.yubikey.authenticator.description', 'login'),\n      iconClassName: 'mfa-yubikey',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n  }\n\n  case AUTHENTICATOR_KEY.CUSTOM_APP: {\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? authenticator?.relatesTo?.displayName\n        : loc('oie.custom.app.authenticator.description', 'login', [authenticator.label]),\n      noTranslateClassName: isVerifyAuthenticator ? 'no-translate' : '',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n      iconClassName: 'mfa-custom-app-logo',\n      logoUri : authenticator?.relatesTo?.logoUri || ''\n    });\n    break;\n  }\n\n  case AUTHENTICATOR_KEY.SMARTCARD: {\n    Object.assign(authenticatorData, {\n      description: isVerifyAuthenticator\n        ? ''  \n        : loc('oie.smartcard.authenticator.description', 'login'),\n      iconClassName: 'mfa-smartcard',\n      buttonDataSeAttr: getButtonDataSeAttr(authenticator),\n    });\n    break;\n  }\n\n  }\n  return authenticatorData;\n};\n\nexport function getAuthenticatorDataForEnroll(authenticator) {\n  return getAuthenticatorData(authenticator);\n}\n\nexport function getAuthenticatorDataForVerification(authenticator) {\n  return getAuthenticatorData(authenticator, true);\n}\n\nexport function getIconClassNameForBeacon(authenticatorKey) {\n  return getAuthenticatorData({ authenticatorKey }).iconClassName;\n}\n\nexport function removeRequirementsFromError(errorJSON) {\n  if (errorJSON.errorCauses?.length > 0\n    && Array.isArray(errorJSON.errorCauses[0].errorSummary)\n    && errorJSON.errorCauses[0].errorSummary.length > 0) {\n    // Change from Array to string for all errors.\n    errorJSON.errorCauses[0].errorSummary = errorJSON.errorCauses[0].errorSummary[0];\n\n    // Overrides for particular error messages.\n    const errorKey = errorJSON.errorCauses[0].errorKey?.length > 0 && errorJSON.errorCauses[0].errorKey[0];\n    // Remove the requirements string only if this is requirements were not met error.\n    if (errorKey === 'password.passwordRequirementsNotMet') {\n      errorJSON.errorCauses[0].errorSummary = loc('registration.error.password.passwordRequirementsNotMet', 'login');\n    }\n  }\n  return errorJSON;\n}\n\n/**\n * Get authenticator display name from {@code remediation}.\n *\n * @param {Object} remediation\n */\nexport function getAuthenticatorDisplayName(remediation) {\n  return remediation.relatesTo?.value?.displayName;\n}\n\n// Re-export function from FactorUtil\nexport { getPasswordComplexityDescriptionForHtmlList };\n","const I18N_BASE_ATTRIBUTE_ENROLL_PROFILE_MAPPINGS = {\n  /**\n   * Mapping fields in the enroll profile remediation form to their i18n label for localization.\n   */\n  'enroll-profile.userProfile.lastName': 'oie.user.profile.lastname',\n  'enroll-profile.userProfile.firstName': 'oie.user.profile.firstname',\n  'enroll-profile.userProfile.email': 'oie.user.profile.primary.email',\n  'enroll-profile.userProfile.secondEmail': 'oie.user.profile.secondary.email',\n  'enroll-profile.userProfile.middleName': 'oie.user.profile.middleName',\n  'enroll-profile.userProfile.honorificPrefix': 'oie.user.profile.honorificPrefix',\n  'enroll-profile.userProfile.honorificSuffix': 'oie.user.profile.honorificSuffix',\n  'enroll-profile.userProfile.title': 'oie.user.profile.title',\n  'enroll-profile.userProfile.displayName': 'oie.user.profile.displayName',\n  'enroll-profile.userProfile.nickName': 'oie.user.profile.nickName',\n  'enroll-profile.userProfile.profileUrl': 'oie.user.profile.profileUrl',\n  'enroll-profile.userProfile.mobilePhone': 'oie.user.profile.mobilePhone',\n  'enroll-profile.userProfile.primaryPhone': 'oie.user.profile.primaryPhone',\n  'enroll-profile.userProfile.streetAddress': 'oie.user.profile.streetAddress',\n  'enroll-profile.userProfile.city': 'oie.user.profile.city',\n  'enroll-profile.userProfile.state': 'oie.user.profile.state',\n  'enroll-profile.userProfile.zipCode': 'oie.user.profile.zipCode',\n  'enroll-profile.userProfile.postalCode': 'oie.user.profile.postalCode',\n  'enroll-profile.userProfile.countryCode': 'oie.user.profile.countryCode',\n  'enroll-profile.userProfile.postalAddress': 'oie.user.profile.postalAddress',\n  'enroll-profile.userProfile.preferredLanguage': 'oie.user.profile.preferredLanguage',\n  'enroll-profile.userProfile.locale': 'oie.user.profile.locale',\n  'enroll-profile.userProfile.timezone': 'oie.user.profile.timezone',\n  'enroll-profile.userProfile.userType': 'oie.user.profile.userType',\n  'enroll-profile.userProfile.employeeNumber': 'oie.user.profile.employeeNumber',\n  'enroll-profile.userProfile.costCenter': 'oie.user.profile.costCenter',\n  'enroll-profile.userProfile.organization': 'oie.user.profile.organization',\n  'enroll-profile.userProfile.division': 'oie.user.profile.division',\n  'enroll-profile.userProfile.department': 'oie.user.profile.department',\n  'enroll-profile.userProfile.managerId': 'oie.user.profile.managerId',\n  'enroll-profile.userProfile.manager': 'oie.user.profile.manager',\n  'enroll-profile.credentials.passcode': 'oie.password.label',\n};\n\nexport {\n  I18N_BASE_ATTRIBUTE_ENROLL_PROFILE_MAPPINGS,\n};\n","/* eslint-disable max-len */\n/* eslint max-statements: [2, 25], complexity: [2, 15] */\n\n/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n///////////////////////////////////////////////////////////////////////////////\n//                                  How this transformer work?               //\n//\n// ## For Labels inside remediation forms\n// 1. Figure out Path for all Labels (for normal field, or options) or Placeholder (for checkbox),e.g.\n//   - `identify.identifier`, this is the label for user name at identify page\n//   - `select-authenticator-enroll.authenticator.email`,\n//      this is for label for email authenticator at `select-authenticator-enroll` page\n// 2. Define a mapping between the path and i18n key. see `I18N_OVERRIDE_MAPPINGS`\n//   - This mapping is subject to change when API starts sending i18n key along with label.\n//     It probably becomes a mapping between API's i18n key and key in login.properties\n//     in order to be backward compatible.\n// 3. Now find i18n value using such route: `i18n Path -> i18n key -> login.properties`\n//    If found an i18n value, replace label by this i18n value.\n//\n// ## For top level messages\n// 1. Overwrite `message.message` if `message.i18n.key` exists in `login.properties`\n//\n// ## How to override mappings in I18N_OVERRIDE_MAPPINGS for localization?\n// Step 1. First search the string in login.properties and see if already exists or not\n// Step 2. Find idx response path, for eg. select-authenticator-enroll.authenticator.email\n// Step 3. Make that path a key and add it to I18N_OVERRIDE_MAPPINGS if doesn't exist already\n// Step 4. If you find a key in Step 1 that already exists, use it as value of key created in Step 3, \n//          else create a new label `oie.your.new.label` and add it.\n// Step 5. If you create a new label then add that to login.properties file with proper string\n//         oie.your.new.label = Your new string\n///////////////////////////////////////////////////////////////////////////////\n\nimport { _, loc, $ } from '@okta/courage';\nimport Bundles from 'util/Bundles';\nimport Logger from 'util/Logger';\nimport { getAuthenticatorDisplayName } from '../view-builder/utils/AuthenticatorUtil';\nimport { FORMS, AUTHENTICATOR_KEY } from './RemediationConstants';\nimport { I18N_BASE_ATTRIBUTE_ENROLL_PROFILE_MAPPINGS } from '../view-builder/views/enroll-profile/i18nBaseAttributeMappings';\n\nconst WEBAUTHN_API_GENERIC_ERROR_KEY = 'authfactor.webauthn.error';\n\nconst SECURITY_QUESTION_PREFIXES = [\n  'enroll-authenticator.security_question.credentials.questionKey.',\n  'challenge-authenticator.security_question.credentials.questionKey.',\n];\n\nconst I18N_OVERRIDE_MAPPINGS = {\n  'identify.identifier': 'primaryauth.username.placeholder',\n  'select-authenticator-unlock-account.identifier': 'primaryauth.username.placeholder',\n  'identify.credentials.passcode': 'primaryauth.password.placeholder',\n  'identify.rememberMe': 'oie.remember',\n  'enroll-profile.userProfile.rememberMe': 'oie.remember',\n  \n  'identify-recovery.identifier': 'password.forgot.email.or.username.placeholder',\n\n  'select-authenticator-enroll.authenticator.duo': 'factor.duo',\n  'select-authenticator-enroll.authenticator.google_otp': 'oie.google_authenticator.label',\n  'select-authenticator-enroll.authenticator.okta_email': 'oie.email.label',\n  'select-authenticator-enroll.authenticator.okta_password': 'oie.password.label',\n  'select-authenticator-enroll.authenticator.okta_verify': 'oie.okta_verify.label',\n  'select-authenticator-enroll.authenticator.phone_number': 'oie.phone.label',\n  'select-authenticator-enroll.authenticator.rsa_token': 'factor.totpHard.rsaSecurId',\n  'select-authenticator-enroll.authenticator.security_question': 'oie.security.question.label',\n  'select-authenticator-enroll.authenticator.symantec_vip': 'factor.totpHard.symantecVip',\n  'select-authenticator-enroll.authenticator.webauthn': 'oie.webauthn.label',\n  'select-authenticator-enroll.authenticator.yubikey_token': 'oie.yubikey.label',\n\n  'select-authenticator-authenticate.authenticator.duo': 'factor.duo',\n  'select-authenticator-authenticate.authenticator.google_otp': 'oie.google_authenticator.label',\n  'select-authenticator-authenticate.authenticator.okta_email': 'oie.email.label',\n  'select-authenticator-authenticate.authenticator.okta_password': 'oie.password.label',\n  'select-authenticator-authenticate.authenticator.okta_verify.push': 'oie.okta_verify.push.title',\n  'select-authenticator-authenticate.authenticator.okta_verify.signed_nonce': 'oie.okta_verify.signed_nonce.label',\n  'select-authenticator-authenticate.authenticator.okta_verify.totp': 'oie.okta_verify.totp.title',\n  'select-authenticator-authenticate.authenticator.phone_number': 'oie.phone.label',\n  'select-authenticator-authenticate.authenticator.rsa_token': 'factor.totpHard.rsaSecurId',\n  'select-authenticator-authenticate.authenticator.security_question': 'oie.security.question.label',\n  'select-authenticator-authenticate.authenticator.symantec_vip': 'factor.totpHard.symantecVip',\n  'select-authenticator-authenticate.authenticator.webauthn': 'oie.webauthn.label',\n  'select-authenticator-authenticate.authenticator.yubikey_token': 'oie.yubikey.label',\n  'select-authenticator-authenticate.authenticator.custom_app': 'oie.custom.app.authenticator.title',\n\n  'select-authenticator-unlock-account.authenticator.okta_email': 'oie.email.label',\n  'select-authenticator-unlock-account.authenticator.phone_number': 'oie.phone.label',\n  'select-authenticator-unlock-account.authenticator.okta_verify.push': 'oie.okta_verify.push.title',\n\n  'authenticator-verification-data.okta_verify.authenticator.methodType.signed_nonce':\n    'oie.okta_verify.signed_nonce.label',\n  'authenticator-verification-data.okta_verify.authenticator.methodType.push': 'oie.okta_verify.push.title',\n  'authenticator-verification-data.okta_verify.authenticator.methodType.totp': 'oie.okta_verify.totp.title',\n\n  'authenticator-enrollment-data.phone_number.authenticator.phoneNumber': 'mfa.phoneNumber.placeholder',\n  'authenticator-enrollment-data.phone_number.authenticator.methodType.sms': 'oie.phone.enroll.sms.label',\n  'authenticator-enrollment-data.phone_number.authenticator.methodType.voice': 'oie.phone.enroll.voice.label',\n\n  'enroll-authenticator.okta_password.credentials.passcode': 'oie.password.passwordLabel',\n  'enroll-authenticator.okta_email.credentials.passcode': 'mfa.challenge.enterCode.placeholder',\n  'enroll-authenticator.phone_number.credentials.passcode': 'mfa.challenge.enterCode.placeholder',\n  'enroll-authenticator.security_question.sub_schema_local_credentials.0': 'oie.security.question.questionKey.label',\n  'enroll-authenticator.security_question.sub_schema_local_credentials.1': 'oie.security.question.createQuestion.label',\n  'enroll-authenticator.security_question.credentials.answer': 'mfa.challenge.answer.placeholder',\n  'enroll-authenticator.security_question.credentials.question': 'oie.security.question.createQuestion.label',\n  'enroll-authenticator.security_question.credentials.questionKey': 'oie.security.question.questionKey.label',\n  'enroll-authenticator.google_otp.credentials.passcode': 'oie.google_authenticator.otp.enterCodeText',\n  'enroll-authenticator.onprem_mfa.credentials.clientData': 'enroll.onprem.username.placeholder',\n  'enroll-authenticator.onprem_mfa.credentials.passcode': 'enroll.onprem.passcode.placeholder',\n  'enroll-authenticator.rsa_token.credentials.clientData': 'enroll.onprem.username.placeholder',\n  'enroll-authenticator.rsa_token.credentials.passcode': 'enroll.onprem.passcode.placeholder',\n  'enroll-authenticator.symantec_vip.credentials.credentialId': 'enroll.symantecVip.credentialId.placeholder',\n  'enroll-authenticator.symantec_vip.credentials.passcode': 'enroll.symantecVip.passcode1.placeholder',\n  'enroll-authenticator.symantec_vip.credentials.nextPasscode': 'enroll.symantecVip.passcode2.placeholder',\n  'enroll-authenticator.yubikey_token.credentials.passcode': 'oie.yubikey.passcode.label',\n\n  'enrollment-channel-data.email': 'oie.enroll.okta_verify.channel.email.label',\n  'enrollment-channel-data.phoneNumber': 'mfa.phoneNumber.placeholder',\n\n  'select-enrollment-channel.authenticator.channel.qrcode': 'oie.enroll.okta_verify.select.channel.qrcode.label',\n  'select-enrollment-channel.authenticator.channel.email': 'oie.enroll.okta_verify.select.channel.email.label',\n  'select-enrollment-channel.authenticator.channel.sms': 'oie.enroll.okta_verify.select.channel.sms.label',\n\n  'challenge-authenticator.okta_email.credentials.passcode': 'mfa.challenge.enterCode.placeholder',\n  'challenge-authenticator.okta_password.credentials.passcode': 'mfa.challenge.password.placeholder',\n  'challenge-authenticator.phone_number.credentials.passcode': 'mfa.challenge.enterCode.placeholder',\n  'challenge-authenticator.security_question.credentials.answer': 'mfa.challenge.answer.placeholder',\n  'challenge-authenticator.okta_verify.credentials.totp': 'oie.okta_verify.totp.enterCodeText',\n  'challenge-authenticator.google_otp.credentials.passcode': 'oie.google_authenticator.otp.enterCodeText',\n  'challenge-authenticator.onprem_mfa.credentials.passcode': 'mfa.challenge.enterCode.placeholder',\n  'challenge-authenticator.rsa_token.credentials.passcode': 'mfa.challenge.enterCode.placeholder',\n  'challenge-authenticator.custom_otp.credentials.passcode': 'oie.custom_otp.verify.passcode.label',\n  'challenge-authenticator.symantec_vip.credentials.passcode': 'oie.symantecVip.verify.passcode.label',\n  'challenge-authenticator.yubikey_token.credentials.passcode': 'oie.yubikey.passcode.label',\n  'challenge-authenticator.credentials.passcode': 'oie.password.label',\n\n  'reset-authenticator.okta_password.credentials.passcode': 'oie.password.newPasswordLabel',\n  'reset-authenticator.okta_password.confirmPassword': 'oie.password.confirmPasswordLabel',\n  'reset-authenticator.okta_password.credentials.revokeSessions': 'password.reset.revokeSessions',\n  'reenroll-authenticator.okta_password.credentials.passcode': 'oie.password.newPasswordLabel',\n  'reenroll-authenticator.okta_password.confirmPassword': 'oie.password.confirmPasswordLabel',\n  'reenroll-authenticator.okta_password.credentials.revokeSessions': 'password.reset.revokeSessions',\n  'reenroll-authenticator-warning.okta_password.credentials.passcode': 'oie.password.newPasswordLabel',\n  'reenroll-authenticator-warning.okta_password.confirmPassword': 'oie.password.confirmPasswordLabel',\n  'reenroll-authenticator-warning.okta_password.credentials.revokeSessions': 'password.reset.revokeSessions',\n  'enroll-authenticator.okta_password.confirmPassword': 'oie.password.confirmPasswordLabel',\n  'enroll-authenticator.okta_password.credentials.revokeSessions': 'password.reset.revokeSessions',\n  'incorrectPassword': 'oie.password.incorrect.message',\n\n  'profile-update.userProfile.secondEmail': 'oie.user.profile.secondary.email',\n\n  'user-code.userCode': 'device.code.activate.label',\n\n  // Remap authn API errors to OIE\n  'api.authn.poll.error.push_rejected': 'oktaverify.rejected',\n\n  // Remap duo API errors to OIE\n  'oie.authenticator.duo.method.duo.verification_timeout': 'oie.authenticator.duo.error',\n  'oie.authenticator.duo.method.duo.verification_failed': 'oie.authenticator.duo.error',\n\n  'idx.email.verification.required': 'registration.complete.confirm.text',\n  'tooManyRequests': 'oie.tooManyRequests',\n  'api.users.auth.error.POST_PASSWORD_UPDATE_AUTH_FAILURE': 'oie.post.password.update.auth.failure.error',\n  'security.access_denied': 'errors.E0000006',\n  'E0000009': 'errors.E0000009',\n  'E0000020': 'errors.E0000020',\n  'api.factors.error.sms.invalid_phone': 'oie.phone.invalid',\n  'app.ldap.password.reset.failed': 'errors.E0000017',\n  'oie.selfservice.unlock_user.challenge.failed.permissions': 'errors.E0000006',\n  'core.auth.factor.signedNonce.error.invalidEnrollment': 'core.auth.factor.signedNonce.error',\n  'core.auth.factor.signedNonce.error.invalidFactor': 'core.auth.factor.signedNonce.error',\n  'core.auth.factor.signedNonce.error.deletedDevice': 'core.auth.factor.signedNonce.error',\n  'core.auth.factor.signedNonce.error.invalidDeviceStatus': 'core.auth.factor.signedNonce.error.invalidDevice',\n\n  // re-map autoPush: \"Send push automatically\"\n  'challenge-poll.custom_app.autoChallenge': 'autoPush', // authenticator-verification-custom-app-push-autochallenge\n  'challenge-poll.okta_verify.autoChallenge': 'autoPush', // authenticator-verification-okta-verify-push-autoChallenge-on\n  'authenticator-verification-data.authenticator.autoChallenge': 'autoPush', // authenticator-verification-data-okta-verify-push-autoChallenge-off.json\n  'authenticator-verification-data.okta_verify.authenticator.autoChallenge': 'autoPush',\n  'authenticator-verification-data.custom_app.authenticator.autoChallenge': 'autoPush',\n  \n  // Existing overrides\n  ...I18N_BASE_ATTRIBUTE_ENROLL_PROFILE_MAPPINGS, //enroll-profile strings\n};\n\nconst I18N_PARAMS_MAPPING = {\n  [FORMS.ENROLL_AUTHENTICATOR]: {\n    [AUTHENTICATOR_KEY.ON_PREM]: {\n      getParam: getAuthenticatorDisplayName,\n    },\n    [AUTHENTICATOR_KEY.RSA]: {\n      getParam: getAuthenticatorDisplayName,\n    },\n  },\n};\n\n/**\n * For i18n keys that require string interpolation using values from \"params\".\n * {baseKey} : {params}\n */\nconst I18N_OVERRIDE_WITH_PARAMS_MAP = {\n  'registration.error.invalidLoginEmail': {\n    Email: 'Email',\n  },\n  'registration.error.doesNotMatchPattern': {\n    Email: 'Email',\n  },\n  'registration.error.notUniqueWithinOrg': {\n    Email: 'Email',\n  },\n};\n\n/**\n * For messages that need to be interpolated with param values.\n *\n * Enumerate each possible param interpolation and hardcode that into properties file.\n * This is to ensure proper translation.\n *\n * Example - a known param:\n *\n * input =\n *  \"i18n\": {\n      \"key\": \"registration.error.doesNotMatchPattern\",\n      \"params\": [\n        \"Email\"\n      ]\n    }\n * output = registration.error.doesNotMatchPattern.Email\n *\n * Example - an unknown param:\n *\n * input =\n *  \"i18n\": {\n      \"key\": \"registration.error.doesNotMatchPattern\",\n      \"params\": [\n        \"Custom Property\"\n      ]\n    }\n * output = registration.error.doesNotMatchPattern.custom\n *\n * @param {String} key\n * @param {String} param\n * @returns {String}\n */\nconst getI8nKeyUsingParams = (key, param) => {\n  let i18nKey = key;\n\n  if (I18N_OVERRIDE_WITH_PARAMS_MAP[i18nKey][param]) {\n    i18nKey += `.${param}`;\n  } else {\n    i18nKey += '.custom';\n  }\n  return i18nKey;\n};\n\nconst getI18NParams = (remediation, authenticatorKey) => {\n  const params = [];\n  const formName = remediation.name;\n  if (I18N_PARAMS_MAPPING[formName] &&\n    I18N_PARAMS_MAPPING[formName][authenticatorKey]) {\n    const config = I18N_PARAMS_MAPPING[formName][authenticatorKey];\n    const param = config.getParam(remediation);\n    params.push(param);\n  }\n  return params;\n};\n\nconst getI18nKey = (i18nPath) => {\n  let i18nKey;\n  // Extract security question value from i18nPath\n  SECURITY_QUESTION_PREFIXES.forEach(prefix => {\n    if (i18nPath.indexOf(prefix) === 0) {\n      const securityQuestionValue = i18nPath.replace(prefix, '');\n      i18nKey = `security.${securityQuestionValue}`;\n    }\n  });\n\n  if (I18N_OVERRIDE_MAPPINGS[i18nPath]) {\n    i18nKey = I18N_OVERRIDE_MAPPINGS[i18nPath];\n  }\n\n  if (i18nKey && !Bundles.login[i18nKey]) {\n    Logger.warn(`expect i18n key ${i18nKey} for ${i18nPath} but not found in 'login' bundle.`);\n    i18nKey = null;\n  }\n\n  return i18nKey;\n};\n\nconst doesI18NKeyExist = (i18nKey) => {\n  return !!Bundles.login[i18nKey];\n};\n\n/**\n * Find i18n value using {@code i18nPath} if it exists.\n * Otherwise return {@code defaultValue}.\n *\n * @param {string} i18nPath\n * @param {string} defaultValue\n * @param {string[]} params\n */\nconst getI18NValue = (i18nPath, defaultValue, params = []) => {\n  const i18nKey = getI18nKey(i18nPath);\n  if (i18nKey) {\n    return loc(i18nKey, 'login', params);\n  } else {\n    Logger.warn(`Avoid rendering unlocalized text sent from the API: ${defaultValue}`);\n    return defaultValue;\n  }\n};\n\nconst updateLabelForUiSchema = (remediation, uiSchema) => {\n  if (uiSchema.mutable === false && uiSchema.name.indexOf('questionKey') < 0) {\n    return;\n  }\n  Logger.info('i18n label transformer');\n  Logger.info('\\t remediationName: ', remediation.name);\n  Logger.info('\\t uiSchema: ', JSON.stringify(uiSchema));\n\n  const authenticatorKey = remediation.relatesTo?.value?.key;\n  const authenticatorKeyPath = authenticatorKey\n    ? `.${remediation.relatesTo.value.key}`\n    : '';\n\n  const i18nPrefix = `${remediation.name}${authenticatorKeyPath}.`;\n  let i18nPath = `${i18nPrefix}${uiSchema.name}`;\n\n  if (uiSchema.type === 'text' && uiSchema.name.indexOf('questionKey') >= 0 && uiSchema.value !== 'custom') {\n    i18nPath = `${i18nPath}.${uiSchema.value}`;\n  }\n\n  if (uiSchema.type === 'checkbox' && uiSchema.placeholder) {\n    Logger.info('\\t 1: ', i18nPath);\n    uiSchema.placeholder = getI18NValue(i18nPath, uiSchema.placeholder);\n  }\n\n  if (uiSchema.label) {\n    Logger.info('\\t 2: ', i18nPath);\n    const params = getI18NParams(remediation, authenticatorKey);\n    uiSchema.label = uiSchema.customLabel ? uiSchema.label : getI18NValue(i18nPath, uiSchema.label, params);\n  }\n  if ($.isPlainObject(uiSchema.options)) {\n    uiSchema.options = _.mapObject(uiSchema.options, (value, key) => {\n      const i18nPathOption = `${i18nPath}.${key}`;\n      Logger.info('\\t 3: ', i18nPathOption);\n      return getI18NValue(i18nPathOption, value);\n    });\n  }\n  if (Array.isArray(uiSchema.options)) {\n    uiSchema.options.forEach(o => {\n      if (!o.label) {\n        return;\n      }\n      let i18nPathOption;\n      if (o.authenticatorKey) {\n        i18nPathOption = `${i18nPath}.${o.authenticatorKey}`;\n\n        const methodType = o.value?.methodType;\n        if (o.authenticatorKey === AUTHENTICATOR_KEY.OV && methodType) {\n          i18nPathOption = `${i18nPathOption}.${methodType}`;\n        }\n      } else if (typeof o.value === 'string' || typeof o.value === 'number') { // value could be string, number, object or undefined.\n        i18nPathOption = `${i18nPath}.${o.value}`;\n      } else {\n        i18nPathOption = i18nPath;\n      }\n      Logger.info('\\t 4: ', i18nPathOption);\n      o.label = getI18NValue(i18nPathOption, o.label);\n    });\n  }\n\n  if (Array.isArray(uiSchema.optionsUiSchemas)) {\n    uiSchema.optionsUiSchemas.forEach(optionsUiSchema => {\n      optionsUiSchema.forEach(uiSchema => updateLabelForUiSchema(remediation, uiSchema));\n    });\n  }\n\n};\n\nconst isWebAuthnAPIError = (i18nKey) => i18nKey.startsWith(WEBAUTHN_API_GENERIC_ERROR_KEY);\n\n/**\n * @typedef {Object} Message\n * @property {string} message\n * @property {Object=} i18n\n * @property {string} i18n.key\n * @property {string[]} i18n.params\n */\n/**\n * - If `message.i18n.key` exists and has a value in 'login.properties'\n *   through the given key or via I18N_OVERRIDE_MAPPINGS, return the value.\n *\n * - returns `message.message` otherwise\n *\n * @param {Message} message\n */\nconst getMessage = (message) => {\n  if (message.i18n?.key) {\n    let i18nKey = message.i18n.key;\n    let i18nParams = message.i18n.params || [];\n\n    // TODO - remove this block once API fix is done - OKTA-398080\n    // Sometimes API sends params: [\"\"] an array with empty string.\n    // example - error-authenticator-enroll-password-common mock\n    if (i18nParams.length === 1 && i18nParams[0] === '') {\n      i18nParams = [];\n    }\n\n    if (I18N_OVERRIDE_MAPPINGS[message.i18n?.key]) {\n      i18nKey = I18N_OVERRIDE_MAPPINGS[message.i18n?.key];\n    } else if (I18N_OVERRIDE_WITH_PARAMS_MAP[i18nKey]) {\n      const param = message.i18n.params?.[0];\n      i18nKey = getI8nKeyUsingParams(i18nKey, param);\n      i18nParams = i18nKey.endsWith('custom') ? [param] : [];\n    }\n\n    if (Bundles.login[i18nKey]) {\n      Logger.info(`Override messages using i18n key ${i18nKey}`);\n      // expect user config i18n properly.\n      // e.g. the i18n value shall have placeholders like `{0}`, when params is not empty.\n      return loc(i18nKey, 'login', i18nParams);\n    }\n\n    if (isWebAuthnAPIError(i18nKey)) {\n      // The WebAuthn api error doesn't make much sense to a typical end user, but useful for developer.\n      // So keep the api message in response, but show a generic error message on UI.\n      return loc(WEBAUTHN_API_GENERIC_ERROR_KEY, 'login');\n    }\n  }\n\n  Logger.warn(`Avoid rendering unlocalized text sent from the API: ${message.message}`);\n  return message.message;\n};\n\n/**\n * @param {Object} error\n */\nconst getMessageFromBrowserError = (error) => {\n  if (error.name) {\n    const key = `oie.browser.error.${error.name}`;\n    if (Bundles.login[key]) {\n      Logger.info(`Override messages using i18n key ${key}`);\n      // expect user config i18n properly.\n      return loc(key, 'login');\n    }\n  }\n  return error.message;\n};\n\n/**\n * - iff `message.i18n.key` exists return the key.\n *\n * @param {Message} message\n */\nconst getMessageKey = (message) => {\n  return message?.i18n?.key || '';\n};\n\nconst uiSchemaLabelTransformer = (transformedResp) => {\n  // Try to override label using i18n value\n  if (Array.isArray(transformedResp.remediations)) {\n    transformedResp.remediations\n      .filter(remediation => Array.isArray(remediation.uiSchema) && remediation.uiSchema.length)\n      .forEach(remediation => {\n        remediation.uiSchema.forEach(uiSchema => updateLabelForUiSchema(remediation, uiSchema));\n      });\n  }\n\n  // Try to override `messages` using i18n value.\n  // 1. This is only handling top level `messages` object when response status is 200.\n  // 2. See `IonResponseHelper.js` where handle `messages` object when none 200 response.\n  // 3. Handling `messages` in remediation forms on 200 response is not considered yet.\n  //    Is that possible?\n  if (Array.isArray(transformedResp.messages?.value)) {\n    transformedResp.messages.value.forEach(message => {\n      message.message = getMessage(message);\n    });\n  }\n  return transformedResp;\n};\n\n/**\n * Has this i18n key been overridden for customization?\n * @param {String} i18nKey\n * @param {Object} settings\n * @returns Boolean\n */\nconst isCustomizedI18nKey = (i18nKey, settings) => {\n  const language = settings.get('languageCode');\n  const i18n = settings.get('i18n');\n  const customizedProperty = i18n && i18n[language] && i18n[language][i18nKey];\n  return !!customizedProperty;\n};\n\nexport {\n  uiSchemaLabelTransformer as default,\n  getMessage,\n  getMessageKey,\n  getI18NParams,\n  getI18nKey,\n  getI18NValue,\n  doesI18NKeyExist,\n  isCustomizedI18nKey,\n  getMessageFromBrowserError\n};\n","import { IdxResponse } from \"@okta/okta-auth-js\";\nimport AppState from '../models/AppState';\nimport sessionStorageHelper from './sessionStorageHelper';\nimport { interactionCodeFlow } from './interactionCodeFlow';\nimport { FORMS } from \"../ion/RemediationConstants\";\nimport transformIdxResponse from '../ion/transformIdxResponse';\n\n\nexport async function updateAppState(appState: AppState, idxResponse: IdxResponse): Promise<void> {\n  const settings = appState.settings;\n\n  const lastResponse = appState.get('idx');\n  const useInteractionCodeFlow = settings.get('oauth2Enabled');\n  if (useInteractionCodeFlow) {\n    if (idxResponse.interactionCode) {\n      // Although session.stateHandle isn't used by interation flow,\n      // it's better to clean up at the end of the flow.\n      sessionStorageHelper.removeStateHandle();\n      // This is the end of the IDX flow, now entering OAuth\n      const tokens = await interactionCodeFlow(settings, idxResponse);\n      // At the successful end of IDX flow `clearAppStateCache` has been called, \n      //  but `setIonResponse` is not called, so `appState` is empty.\n      // In such case `FormController` is not able to render any form.\n      appState.unset('currentFormName', { silent: true });\n      return tokens;\n    }  \n  } else {\n    // Do not save state handle for the first page loads.\n    // Because there shall be no difference between following behavior\n    // 1. bootstrap widget\n    //    -> save state handle to session storage\n    //    -> refresh page\n    //    -> introspect using sessionStorage.stateHandle\n    // 2. bootstrap widget\n    //    -> do not save state handle to session storage\n    //    -> refresh page\n    //    -> introspect using options.stateHandle\n    if (lastResponse) {\n      sessionStorageHelper.setStateHandle(idxResponse?.context?.stateHandle);\n    }\n    // Login flows that mimic step up (moving forward in login pipeline) via internal api calls,\n    // need to clear stored stateHandles.\n    // This way the flow can maintain the latest state handle. For eg. Device probe calls\n    if (appState.get('currentFormName') === FORMS.CANCEL_TRANSACTION) {\n      sessionStorageHelper.removeStateHandle();\n    }\n  }\n\n  // transform response\n  const ionResponse = transformIdxResponse(settings, idxResponse, lastResponse);\n\n  await appState.setIonResponse(ionResponse);\n}\n","/*!\n * Copyright (c) 2021, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport Enums from 'util/Enums';\nimport { ConfigError } from 'util/Errors';\nimport { toQueryString } from '@okta/okta-auth-js';\nimport { getTypedOAuthError, RecoverableError } from 'util/OAuthErrors';\n\n// eslint-disable-next-line max-statements\nexport async function interactionCodeFlow(settings, idxResponse) {\n  const { interactionCode } = idxResponse;\n  const authClient = settings.getAuthClient();\n  const transactionMeta = await authClient.idx.getSavedTransactionMeta();\n  const state = authClient.options.state || transactionMeta?.state;\n\n  // In remediation mode the transaction is owned by another client.\n  const isRemediationMode = settings.get('mode') === 'remediation';\n  if (isRemediationMode) {\n    authClient.idx.clearTransactionMeta();\n  }\n  \n  // server-side applications will want to received interaction_code as a query parameter\n  // this option can also be used to force a redirect for client-side/SPA applications\n  const shouldRedirect = settings.get('redirect') === 'always';\n  if (shouldRedirect) {\n    const redirectUri = settings.get('redirectUri');\n    if (!redirectUri) {\n      throw new ConfigError('\"redirectUri\" is required');\n    }\n    const qs = toQueryString({ 'interaction_code': interactionCode, state });\n    window.location.assign(redirectUri + qs);\n    return;\n  }\n  \n  // Return a promise (or call success callback) to client-side apps in remediation mode.\n  if (isRemediationMode) {\n    settings.callGlobalSuccess(Enums.SUCCESS, {\n      'interaction_code': interactionCode,\n      state\n    });\n    return;\n  }\n\n  // Operating in \"relying-party\" mode. The widget owns this transaction.\n  // Complete the transaction client-side and call success/resolve promise\n  if (!transactionMeta) {\n    throw new ConfigError('Could not load transaction data from storage');\n  }\n  const { codeVerifier } = transactionMeta;\n  return authClient.token.exchangeCodeForTokens({ codeVerifier, interactionCode })\n    .then(({ tokens }) => {\n      settings.callGlobalSuccess(Enums.SUCCESS, { tokens });\n    })\n    .catch(err => {\n      const typedError = getTypedOAuthError(err);\n      if (typedError instanceof RecoverableError && typedError.is('terminal')) {\n        throw typedError;\n      }\n      settings.callGlobalError(err);\n    })\n    .finally(() => {\n      // clear all meta related to this transaction\n      authClient.idx.clearTransactionMeta();\n    });\n}\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _ } from '@okta/courage';\nimport responseTransformer from './responseTransformer';\nimport uiSchemaTransformer from './uiSchemaTransformer';\nimport i18nTransformer from './i18nTransformer';\n\n// Transforms an IDX response to an ION response\nexport default function transformIdxResponse(settings, curResponse, lastResponse) {\n  const ionResponse = _.compose(\n    i18nTransformer,\n    uiSchemaTransformer.bind({}, settings),\n    responseTransformer.bind({}, settings),\n  )(curResponse, lastResponse);\n  return ionResponse;\n}\n","/*!\n * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n  IdxContext,\n  IdxMessages,\n  IdxResponse,\n  RawIdxResponse\n} from '@okta/okta-auth-js';\nimport { loc } from '@okta/courage';\n\nexport interface LegacyIdxError {\n  error: string;\n  details: IdxResponse\n}\n\nexport interface StandardApiError {\n  error: string;\n  error_description: string;\n}\n\nexport function isInvalidRecoveryTokenError(error): error is StandardApiError {\n  // special case: error from interact when passing an (invalid) recovery token\n  return (error?.error === 'invalid_request' && error.error_description === 'The recovery token is invalid');\n}\n\nexport function formatInvalidRecoveryTokenError(error: StandardApiError) {\n  // This error comes from `oauth2/interact` so is not an IDX error.\n  // simulate an IDX-JS error response\n  const idxError = formatIDXError(error);\n  const { details } = idxError;\n  const messages: IdxMessages = {\n    type: 'array',\n    value: [\n      {\n        message: error.error_description,\n        i18n: {\n          key: 'oie.invalid.recovery.token'\n        },\n        class: 'ERROR'\n      }\n    ],\n  };\n  details.rawIdxState.messages = messages;\n  details.context.messages = messages;\n  return idxError;\n}\n\nexport function isOIENotEnabledError(error): error is StandardApiError {\n  // special case: error from interact when the Org does not have OIE enabled\n  // The response is not in IDX format. See playground/mocks/data/oauth2/error-feature-not-enabled.json\n  return (error?.error === 'access_denied' && error.error_description);\n}\n\nexport function formatOIENotEnabledError(error: StandardApiError) {\n  // This error comes from `oauth2/interact` so the error is in OAuth format\n  // simulate an IDX-JS error response\n  const idxError = formatIDXError(error);\n  const { details } = idxError;\n  const messages: IdxMessages = {\n    type: 'array',\n    value: [\n      {\n        message: error.error_description,\n        i18n: {\n          key: 'oie.feature.disabled'\n        },\n        class: 'ERROR'\n      }\n    ],\n  };\n  details.rawIdxState.messages = messages;\n  details.context.messages = messages;\n  return error;\n}\n\nexport function isOIEConfigurationError(error): error is StandardApiError {\n  return (error?.error && error.error_description);\n}\n\nexport function formatOIEConfigurationError(error) {\n  // This error comes from `oauth2/interact` so the error is in OAuth format\n  // simulate an IDX-JS error response\n  const idxError = formatIDXError(error);\n  const { details } = idxError;\n  const messages: IdxMessages = {\n    type: 'array',\n    value: [\n      {\n        message: loc('oie.configuration.error', 'login'),\n        class: 'ERROR',\n        i18n: undefined\n      }\n    ],\n  };\n  details.rawIdxState.messages = messages;\n  details.context.messages = messages;\n  return error;\n}\n\nexport function formatIDXError(error: LegacyIdxError | StandardApiError | Error): LegacyIdxError {\n  // Make the error object resemble an IDX response\n  const idxError = error as LegacyIdxError;\n  idxError.details = idxError.details || {} as IdxResponse;\n  const { details } = idxError;\n  details.rawIdxState = details.rawIdxState || {} as RawIdxResponse;\n  details.context = details.context || {} as IdxContext;\n  details.neededToProceed = details.neededToProceed || [];\n\n  // Populate generic error message if there isn't any.\n  if (!details.rawIdxState.messages) {\n    const idxMessage: IdxMessages = {\n      type: 'array',\n      value: [\n        {\n          message: loc('oform.error.unexpected', 'login'),\n          class: 'ERROR',\n          i18n: undefined\n        }\n      ]\n    };\n    details.rawIdxState.messages = idxMessage;\n    details.context.messages = idxMessage;\n  }\n\n  return idxError;\n}\n\nexport function formatError(error: string | Error | LegacyIdxError | StandardApiError) {\n  // If the error is a string, wrap it in an Error object\n  if (typeof error === 'string') {\n    error = new Error(error);\n  }\n\n  // special case error handling\n\n  // invalid reccovery token\n  if (isInvalidRecoveryTokenError(error)) {\n    return formatInvalidRecoveryTokenError(error);\n  }\n\n  // OIE is not enabled\n  if (isOIENotEnabledError(error)) {\n    return formatOIENotEnabledError(error);\n  }\n\n  // Other errors from /interact in OAuth format\n  if (isOIEConfigurationError(error)) {\n    return formatOIEConfigurationError(error);\n  }\n\n  error = formatIDXError(error);\n  return error;\n}","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { _ } from '@okta/courage';\nimport { getMessage, getMessageKey } from './i18nTransformer';\n\nconst convertErrorMessageToErrorSummary = (formName, remediationValues = []) => {\n  return _.chain(remediationValues)\n    .filter(field => {\n      return Array.isArray(field.messages?.value) && field.messages.value.length;\n    })\n    .map(field => {\n      return {\n        property: formName ? `${formName}.${field.name}` : field.name,\n        errorSummary: field.messages.value.map(getMessage),\n        errorKey: field.messages.value.map(getMessageKey),\n      };\n    })\n    .value();\n};\n\n/**\n * Although time complexity is O(n^2),\n * the `array` is actually very small (size < 5),\n * hence performance doesn't matter.\n */\nconst uniqWith = (array, comparator) => {\n  if (!Array.isArray(array)) {\n    return [];\n  }\n  if (!_.isFunction(comparator) || array.length === 1) {\n    return array;\n  }\n\n  const result = [];\n  for (let i = 0; i < array.length; i++) {\n    let seen = false;\n    for (let j = i + 1; j < array.length; j++) {\n      /* eslint max-depth: [2, 3] */\n      if (comparator(array[i], array[j])) {\n        seen = true;\n        break;\n      }\n    }\n    if (!seen) {\n      result.push(array[i]);\n    }\n  }\n\n  return result;\n};\n\n/**\n * returns errors\n * @example\n * errors = [\n *   {property : fieldName1, errorSummary: [errorMessage1]},\n *   {property : fieldName2, errorSummary: [errorMessage2]}\n *   {property : fieldName3, errorSummary: [errorMessage31, errorMessage32]}\n * ]\n */\nconst getRemediationErrors = (res) => {\n  let errors = [];\n\n  if (!res.remediation || !Array.isArray(res.remediation.value) || res.remediation.value.length === 0) {\n    return errors;\n  }\n  let remediationFormFields = res.remediation.value[0].value;\n\n  if (!Array.isArray(remediationFormFields)) {\n    return errors;\n  }\n\n  // error at field\n  errors.push(convertErrorMessageToErrorSummary(null, remediationFormFields));\n\n  _.each(remediationFormFields, (remediationForm) => {\n    const formName = remediationForm.name;\n\n    // error at form.value\n    if (Array.isArray(remediationForm.form?.value)) {\n      errors.push(convertErrorMessageToErrorSummary(formName, remediationForm.form.value));\n    }\n\n    // error at option.value.form.value\n    if (Array.isArray(remediationForm.options)) {\n      _.each(remediationForm.options, (option) => {\n        if (Array.isArray(option.value?.form?.value)) {\n          errors.push(convertErrorMessageToErrorSummary(formName, option.value.form.value));\n        }\n      });\n    }\n  });\n\n  // API may return identical error on same field\n  // thus run through `uniqWith`.\n  // Check unit test for details.\n  return uniqWith(_.flatten(errors), _.isEqual);\n};\n\n/**\n * return global error summary combined into one string\n * allErrors = 'error string1. error string2'\n */\nconst getGlobalErrors = (res) => {\n  let allErrors = [];\n\n  if (Array.isArray(res.messages?.value)) {\n    allErrors = res.messages.value.map(getMessage);\n  }\n\n  return allErrors.join('. ');\n};\n\n/**\n * return array of error keys\n */\nconst getGlobalErrorKeys = (res) => {\n  let allKeys = [];\n\n  if (Array.isArray(res.messages?.value)) {\n    allKeys = res.messages.value.map(getMessageKey);\n  }\n\n  return allKeys;\n};\n\nconst convertFormErrors = (response) => {\n  let errors = {\n    errorCauses: getRemediationErrors(response),\n    errorSummary: getGlobalErrors(response),\n    errorSummaryKeys: getGlobalErrorKeys(response),\n    errorIntent: response.intent,\n  };\n\n  return {\n    responseJSON: errors\n  };\n};\n\nconst isIonErrorResponse = (response = {}) => {\n  // check if error format is an ION response by looking for version attribute.\n  // a little sloppy.\n  return response.version;\n};\n\nconst isIdxSessionExpiredError = (response) => {\n  const errorI18NKey = response?.context?.messages?.value[0]?.i18n?.key;\n  return errorI18NKey && errorI18NKey === 'idx.session.expired';\n};\n\nexport default {\n  convertFormErrors,\n  isIonErrorResponse,\n  isIdxSessionExpiredError\n};\n","/* eslint max-depth: [1,4] */\n/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n// BaseLoginRouter contains the more complicated router logic - rendering/\n// transition, etc. Most router changes should happen in LoginRouter (which is\n// responsible for adding new routes)\nimport { _, $, Backbone, Router, loc, BaseRouterOptions } from '@okta/courage';\nimport Settings from 'models/Settings';\nimport Bundles from 'util/Bundles';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport ColorsUtil from 'util/ColorsUtil';\nimport Enums from 'util/Enums';\nimport { ConfigError } from 'util/Errors';\nimport Logger from 'util/Logger';\nimport LanguageUtil from 'util/LanguageUtil';\nimport AuthContainer from 'v1/views/shared/AuthContainer';\nimport Header from 'v1/views/shared/Header';\nimport AppState from './models/AppState';\nimport sessionStorageHelper from './client/sessionStorageHelper';\nimport {\n  startLoginFlow,\n  handleConfiguredFlow,\n  updateAppState,\n} from './client';\n\nimport CookieUtil from 'util/CookieUtil';\nimport { formatError, LegacyIdxError, StandardApiError } from './client/formatError';\nimport { RenderError, RenderResult } from 'types';\nimport { OktaAuth, IdxResponse } from '@okta/okta-auth-js';\nimport Hooks from 'models/Hooks';\nimport IonHelper from './ion/IonResponseHelper';\n\nexport interface BaseLoginRouterOptions extends BaseRouterOptions, Backbone.RouterOptions {\n  globalSuccessFn?: (res: RenderResult) => void;\n  globalErrorFn?: (res: RenderError) => void;\n  authClient?: OktaAuth;\n  hooks: Hooks\n}\n\nclass BaseLoginRouter extends Router<Settings, BaseLoginRouterOptions> {\n  Events: Backbone.Events = Backbone.Events; // also set on prototype\n  hasControllerRendered = false;\n  settings: Settings;\n  appState: AppState;\n  hooks: Hooks;\n  header: Header;\n\n  constructor(options: BaseLoginRouterOptions) {\n    super(options);\n\n    // Create a default success and/or error handler if\n    // one is not provided.\n    if (!options.globalSuccessFn) {\n      options.globalSuccessFn = function() { /* dummy function */ };\n    }\n    if (!options.globalErrorFn) {\n      options.globalErrorFn = function(err) {\n        Logger.error(err);\n      };\n    }\n\n    this.settings = new Settings(_.omit(options, 'el', 'hooks'), { parse: true });\n\n    if (!options.el) {\n      this.settings.callGlobalError(new ConfigError(loc('error.required.el')));\n    }\n\n    $('body > div').on('click', function() {\n      // OKTA-69769 Tooltip wont close on iPhone/iPad\n      // Registering a click handler on the first div\n      // allows a tap that falls outside the tooltip\n      // to be registered as a tap by iOS\n      // and then the open tooltip will lose focus and close.\n    });\n\n    this.hooks = options.hooks;\n    this.appState = new AppState({}, {\n      settings: this.settings,\n      hooks: this.hooks\n    });\n\n    const wrapper = new AuthContainer({ appState: this.appState });\n\n    $(options.el).append(wrapper.render().$el);\n    this.el = `#${Enums.WIDGET_CONTAINER_ID}`;\n    this.header = new Header({\n      el: this.el,\n      appState: this.appState,\n      settings: this.settings,\n    });\n\n    // Hide until unitial render\n    this.hide();\n\n    this.listenTo(this.appState, 'change:deviceFingerprint', this.updateDeviceFingerprint);\n    this.listenTo(this.appState, 'restartLoginFlow', this.restartLoginFlow);\n  }\n\n  updateDeviceFingerprint() {\n    const authClient = this.settings.getAuthClient();\n    const fingerprint = this.appState.get('deviceFingerprint');\n    if (fingerprint) {\n      authClient.http.setRequestHeader('X-Device-Fingerprint', fingerprint);\n    }\n  }\n\n  async handleIdxResponseFailure(error: LegacyIdxError = { error: 'unknown', details: undefined }) {\n    // IDX errors will not call the global error handler\n    error = formatError(error);\n    await updateAppState(this.appState, error.details);\n  }\n\n  // Generic error handler for all exceptions\n  async handleError(error: LegacyIdxError | StandardApiError | Error = { error: 'unknown', details: undefined }) {\n    const formattedError = formatError({...error}); // format the error to resemble an IDX response\n    await updateAppState(this.appState, formattedError.details);\n  }\n\n  /* eslint max-statements: [2, 36], complexity: [2, 16] */\n  async render(Controller, options = {}) {\n    // If url changes then widget assumes that user's intention was to initiate a new login flow,\n    // so clear stored token to use the latest token.\n    if (sessionStorageHelper.getLastInitiatedLoginUrl() !== window.location.href) {\n      sessionStorageHelper.removeStateHandle();\n    }\n    // Since we have a wrapper view, render our wrapper and use its content\n    // element as our new el.\n    // Note: Render it here because we know dom is ready at this point\n    if (!this.header.rendered()) {\n      this.el = this.header.render().getContentEl();\n    }\n\n    // If we need to load a language (or apply custom i18n overrides), do\n    // this now and re-run render after it's finished.\n    if (!Bundles.isLoaded(this.settings.get('languageCode'))) {\n      await LanguageUtil.loadLanguage(this.appState, this.settings);\n    }\n\n    let error;\n    try {\n      let idxResp = await startLoginFlow(this.settings);\n      if (idxResp.error) {\n        await this.handleIdxResponseFailure(idxResp.error);\n      } else {\n        if (this.settings.get('flow') && !this.hasControllerRendered) {\n          idxResp = await handleConfiguredFlow(idxResp, this.settings);\n        }\n\n        // TODO: OKTA-494979 - temporary fix, remove when auth-js is upgraded to 6.6+\n        if (!idxResp.requestDidSucceed && IonHelper.isIdxSessionExpiredError(idxResp)) {\n          // clear transaction subsequent page loads do not use stale interactionHandle\n          const authClient = this.settings.getAuthClient();\n          authClient.transactionManager.clear();\n        }\n\n        await updateAppState(this.appState, idxResp);\n      }\n    } catch (exception) {\n      if (exception.is?.('terminal')) {\n        this.appState.setNonIdxError(exception);\n      } else {\n        error = exception;\n        await this.handleError(exception);\n      }\n    } finally {\n      // These settings should only be used one time, for initial render\n      this.settings.unset('stateToken');\n      this.settings.unset('proxyIdxResponse');\n    }\n\n    // Load the custom colors only on the first render\n    if (this.settings.get('colors.brand') && !ColorsUtil.isLoaded()) {\n      const colors = {\n        brand: this.settings.get('colors.brand'),\n      };\n      const cspNonce = this.settings.get('cspNonce');\n\n      ColorsUtil.addStyle(colors, cspNonce);\n    }\n\n    // Show before initial render\n    this.show();\n\n    // render Controller\n    this.unload();\n    const controllerOptions = _.extend({\n      el: this.el,\n      settings: this.settings,\n      appState: this.appState\n    }, options);\n    this.controller = new Controller(controllerOptions);\n\n    // Bubble up all controller events\n    this.listenTo(this.controller, 'all', this.trigger);\n\n    this.controller.render();\n\n    this.hasControllerRendered = true;\n\n    // This will reject the promise returned from renderEl\n    if (error) {\n      this.settings.callGlobalError(error);\n    }\n\n    // -- TODO: OKTA-244631 How to surface up the CORS error in IDX?\n    // -- The `err` object from idx.js doesn't have XHR object\n    // Global error handling for CORS enabled errors\n    // if (err.xhr && BrowserFeatures.corsIsNotEnabled(err.xhr)) {\n    //   this.settings.callGlobalError(new UnsupportedBrowserError(loc('error.enabled.cors')));\n    //   return;\n    // }\n  }\n\n  /**\n    * When \"Remember My Username\" is enabled, we save the identifier in a cookie\n    * so that the next time the user visits the SIW, the identifier field can be \n    * pre-filled with this value.\n   */\n  updateIdentifierCookie(idxResponse: IdxResponse) {\n    if (this.settings.get('features.rememberMe')) {\n      // Update the cookie with the identifier\n      const user = idxResponse?.context?.user;\n      const { identifier } = user?.value || {};\n      if (identifier) {\n        CookieUtil.setUsernameCookie(identifier);\n      }\n    } else {\n      // We remove the cookie explicitly if this feature is disabled.\n      CookieUtil.removeUsernameCookie();\n    }    \n  }\n\n  hasAuthenticationSucceeded(idxResponse: IdxResponse) {\n    // Check whether authentication has succeeded. This is done by checking the server response\n    // and seeing if either the 'success' or 'successWithInteractionCode' objects are present.\n    return idxResponse?.rawIdxState?.success || idxResponse?.rawIdxState?.successWithInteractionCode;\n  }\n\n  restartLoginFlow() {\n    // clear all transaction data and saved IDX response\n    this.settings.getAuthClient().transactionManager.clear();\n    this.appState.set('idx', undefined);\n\n    // Clear the recoveryToken, if any\n    const authClient = this.settings.getAuthClient();\n    delete authClient.options['recoveryToken'];\n    this.settings.unset('recoveryToken');\n    // clear otp (email magic link), if any\n    this.settings.unset('otp');\n\n    // remove all event listeners from current controller instance. A new instance will be created in render().\n    this.controller.stopListening();\n\n    // Re-render the widget\n    this.render(this.controller.constructor);\n  }\n\n  start() {\n    const pushState = BrowserFeatures.supportsPushState();\n    Router.prototype.start.call(this, { pushState: pushState });\n  }\n\n  hide() {\n    this.header.$el.hide();\n  }\n\n  show() {\n    this.header.$el.show();\n  }\n\n  remove() {\n    this.unload();\n    this.header.$el.remove();\n    this.stopListening(this.appState);\n    this.stopListening(this.settings);\n    Bundles.remove();\n    Backbone.history.stop();\n  }\n}\n\n// Add \"Events\" to prototype for compatibility with existing code\nBaseLoginRouter.prototype.Events = Backbone.Events;\n\nexport default BaseLoginRouter;\n","/*!\n * Copyright (c) 2021, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n// This file attempts to mimic the behavior of a popular hack of the V1 Router, which allowed for the widget to be\n// initialized into a specific form/flow (like Register or Reset Password). To achieve this, an attempt is made to\n// call `idxState.proceed()` with a known remediation depending on the `flow` configuration to \"step\" the widget\n// (and the server's state) to the desired flow/form. The remediation is not guaranteed to be available \n// and will default to the original idx response otherwise. This depends on the Org configurations\nimport { ConfigError } from 'util/Errors';\nimport Logger from 'util/Logger';\nimport { FORMS } from '../ion/RemediationConstants';\nimport { CONFIGURED_FLOW } from './constants';\n\n\n// checks if \"desired\" remeidation is available before calling `.proceed`\n// if not available, returns original idxResponse (and logs warning)\nasync function proceedIfAvailable(idxState, remediation, flow) {\n  const rem = idxState.neededToProceed.find(item => item.name === remediation);\n  if (!rem) {\n    Logger.warn('Expected remediation not found, Org may be misconfigured for this flow');\n    return idxState;\n  }\n\n  try {\n    const nextIdxState = await idxState.proceed(remediation);\n    return nextIdxState;\n  }\n  catch (err) {\n    // catches and handles `Unknown remediation` errors thrown okta-idx-js\n    if (typeof err === 'string' && err.startsWith('Unknown remediation choice')) {\n      Logger.warn(`flow [${flow}] not valid with current Org configurations`);\n      return idxState;\n    }\n    else {\n      // do not catch non-`Unknown remediation` errors here\n      throw err;\n    }\n  }\n}\n\n// attempts to \"step into\" a specific flow by calling `.proceed` with a specific remeidation (or calls an action)\n// the \"desired\" remeidation is not guaranteed to be available, depends upon Org configurations\nasync function stepIntoSpecificIdxFlow(idxState, flow='default') {\n  switch (flow) {\n  case CONFIGURED_FLOW.DEFAULT:\n  case CONFIGURED_FLOW.PROCEED:\n  case CONFIGURED_FLOW.LOGIN:\n    // default IDX response from interact is \"Login\" page/flow. Do nothing\n    return idxState;\n\n  // step logic is handled by auth-js\n  case CONFIGURED_FLOW.REGISTRATION:\n  case CONFIGURED_FLOW.RESET_PASSWORD:\n    return idxState;\n\n  case CONFIGURED_FLOW.UNLOCK_ACCOUNT:\n    // requires: introspect -> identify-recovery -> select-authenticator-unlock-account\n    return await proceedIfAvailable(idxState, FORMS.UNLOCK_ACCOUNT, flow);\n\n  default:\n    Logger.warn(`Unknown \\`flow\\` value: ${flow}`);\n    throw new ConfigError('Invalid \"flow\" configuration');\n  }\n}\n\n// ensures the `flow` stored in the transaction meta matches the flow configuration\n// if they do not match, abandon the current (meta) flow and start a new (configured) flow\nexport async function handleConfiguredFlow(originalResp, settings) {\n  const authClient = settings.getAuthClient();\n  const configuredFlow = authClient.idx.getFlow();\n\n  // attempts to step into the desired flow\n  const idxState = await stepIntoSpecificIdxFlow(originalResp, configuredFlow);\n  return idxState;\n}\n","import { View, $ } from '@okta/courage';\nimport Animations from 'util/Animations';\nimport Enums from 'util/Enums';\n\nexport default View.extend({\n  HeaderBeacon: null,\n\n  initialize() {\n    if (this.HeaderBeacon) {\n      this.add(this.HeaderBeacon);\n    }\n  },\n\n  postRender() {\n    const mainContentContainer = $(`#${Enums.WIDGET_CONTAINER_ID}`);\n\n    if (this.HeaderBeacon) {\n      mainContentContainer.removeClass('no-beacon');\n\n      // animate beacon\n      const beaconContainer = this.$el.find('[data-type=\"beacon-container\"]');\n      Animations.explode(beaconContainer);\n    } else {\n      mainContentContainer.addClass('no-beacon');\n    }\n  },\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n\n  template: hbs('{{label}}'),\n\n  tagName: 'a',\n\n  attributes() {\n    let href = this.options.href || '#';\n    return {\n      'data-se': this.options.name,\n      href: href,\n      target: this.options.target,\n    };\n  },\n\n  className() {\n    const names = ['link'];\n    if (this.options.name) {\n      const nameToClass = this.options.name.replace(/[ ]/g, '-');\n      names.push(`js-${nameToClass}`);\n    }\n    return names.join(' ');\n  },\n\n  postRender() {\n    // TODO OKTA-245224: create sub class of Link to dispatch following if/else logic.\n    if (!this.options.href) {\n      this.$el.click((event) => {\n        event.preventDefault();\n\n        const {\n          appState,\n          formName,\n          actionPath,\n          clickHandler,\n        } = this.options;\n\n        if (clickHandler) {\n          clickHandler();\n        } else if (formName) {\n          appState.trigger('switchForm', formName);\n        } else if (actionPath) {\n          appState.trigger('invokeAction', actionPath);\n        }\n      });\n    }\n  }\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View, $ } from '@okta/courage';\nimport Link from './Link';\n\nexport default View.extend({\n  initialize() {\n    View.prototype.initialize.apply(this, arguments);\n    const textViewOptions = this.options.additionalOptions;\n    const linkName = this.options.name;\n    const linkOptions = Object.assign({}, this.options,\n      {\n        'type': 'link',\n        'aria-expanded': false,\n        'clickHandler': function() {\n          $(textViewOptions.selector).slideToggle(200, () => {\n            $(`.js-${linkName}`).attr('aria-expanded', $(textViewOptions.selector).is(':visible'));\n          });\n        }\n      });\n    this.add(Link, { options: linkOptions });\n    this.add(textViewOptions.view);\n  },\n\n  postRender() {\n    const textViewOptions = this.options.additionalOptions;\n    this.$(textViewOptions.selector).hide();\n  },\n});\n","import { loc, _ } from '@okta/courage';\nimport { ACTIONS, FORMS as RemediationForms } from '../../ion/RemediationConstants';\n\nconst { ENROLLED_PASSWORD_RECOVERY_LINK, ORG_PASSWORD_RECOVERY_LINK } = ACTIONS;\n\nconst getSwitchAuthenticatorLink = (appState) => {\n  if (appState.getRemediationAuthenticationOptions(RemediationForms.SELECT_AUTHENTICATOR_AUTHENTICATE).length > 1) {\n    return [\n      {\n        'type': 'link',\n        'label': loc('oie.verification.switch.authenticator', 'login'),\n        'name': 'switchAuthenticator',\n        'formName': RemediationForms.SELECT_AUTHENTICATOR_AUTHENTICATE,\n      }\n    ];\n  }\n\n  if (appState.getRemediationAuthenticationOptions(RemediationForms.SELECT_AUTHENTICATOR_ENROLL).length >= 1) {\n    return [\n      {\n        'type': 'link',\n        'label': loc('oie.enroll.switch.authenticator', 'login'),\n        'name': 'switchAuthenticator',\n        'formName': RemediationForms.SELECT_AUTHENTICATOR_ENROLL,\n      }\n    ];\n  }\n\n  return [];\n};\n\nconst getForgotPasswordLink = (appState, settings) => {\n  const forgotPasswordLink = {\n    'type': 'link',\n    'label': loc('forgotpassword', 'login'),\n    'name': 'forgot-password',\n  };\n\n  const customForgotPasswordHref = settings.get('helpLinks.forgotPassword');\n\n  if (customForgotPasswordHref) {\n    return [\n      Object.assign({}, {\n        'href': customForgotPasswordHref,\n        'label': loc('forgotpassword', 'login'),\n        'name': 'forgot-password',\n      }),\n    ];\n  }\n\n  // at identify page when only Org Authenticator Password may be available\n  else if (appState.getActionByPath(ORG_PASSWORD_RECOVERY_LINK)) {\n    return [\n      Object.assign({}, forgotPasswordLink, { actionPath: ORG_PASSWORD_RECOVERY_LINK })\n    ];\n  }\n\n  // at password verify page\n  else if (appState.getActionByPath(ENROLLED_PASSWORD_RECOVERY_LINK)) {\n    return [\n      Object.assign({}, forgotPasswordLink, { actionPath: ENROLLED_PASSWORD_RECOVERY_LINK })\n    ];\n  }\n\n  return [];\n};\n\nconst goBackLink = (appState) => {\n  if (appState.hasRemediationObject(RemediationForms.SELECT_AUTHENTICATOR_ENROLL)) {\n    return [\n      {\n        'type': 'link',\n        'label': loc('oie.go.back', 'login'),\n        'name': 'go-back',\n        'formName': RemediationForms.SELECT_AUTHENTICATOR_ENROLL,\n      }\n    ];\n  }\n\n  return [];\n};\n\nconst getSkipSetupLink = (appState, linkName) => {\n  if (appState.hasRemediationObject(RemediationForms.SKIP)) {\n    return [\n      {\n        'type': 'link',\n        'label': linkName ?? loc('oie.enroll.skip.setup', 'login'),\n        'name': 'skip-setup',\n        'actionPath': RemediationForms.SKIP,\n      }\n    ];\n  }\n\n  return [];\n};\n\n// When there is a 'cancel' object in remediation\nconst getSignOutLink = (settings, options = {}) => {\n  if (settings?.get('backToSignInUri')) {\n    return [\n      {\n        'label': loc('goback', 'login'),\n        'name': 'cancel',\n        'href': settings.get('backToSignInUri')\n      },\n    ];\n  }\n\n  return [\n    {\n      'actionPath': 'cancel',\n      'label': !options.label ? loc('goback', 'login') : options.label,\n      'name': 'cancel',\n      'type': 'link'\n    },\n  ];\n};\n\n// Use it to create a widget configured link in the absence of `cancel` object in remediation\nconst getBackToSignInLink = ({settings, appState}) => {\n  const link = {};\n\n  // If backToSignInLink is set, use this value for all scenarios\n  if (settings?.get('backToSignInUri')) {\n    link.href = settings.get('backToSignInUri');\n  }\n  // fallback for embedded scenarios\n  else if (settings?.get('oauth2Enabled')) {\n    link.clickHandler = () => {\n      appState.trigger('restartLoginFlow');\n    };\n  }\n  // fallback for okta-hosted scenarios (backend should set signOutLink or backToSignOutLink)\n  else {\n    link.href = settings?.get('baseUrl');\n  }\n\n  return [\n    {\n      'type': 'link',\n      'label': loc('goback', 'login'),\n      'name': 'go-back',\n      ...link\n    },\n  ];\n};\n\nconst getReloadPageButtonLink = () => {\n  return [\n    {\n      'type': 'link',\n      'label': loc('oie.try.again', 'login'),\n      'name': 'try-again',\n      'href': window.location,\n      'className': 'button button-primary text-align-c'\n    },\n  ];\n};\n\nconst getSignUpLink = (appState, settings) => {\n  const signupLink = [];\n\n  if (appState.hasRemediationObject(RemediationForms.SELECT_ENROLL_PROFILE)) {\n    const signupLinkData = {\n      'type': 'link',\n      'label': loc('oie.registration.form.title', 'login'),\n      'name': 'enroll'\n    };\n    if (_.isFunction(settings.get('registration.click'))) {\n      signupLinkData.clickHandler = settings.get('registration.click');\n    } else {\n      signupLinkData.actionPath = RemediationForms.SELECT_ENROLL_PROFILE;\n    }\n    signupLink.push(signupLinkData);\n  }\n\n  return signupLink;\n};\n\nconst getFactorPageCustomLink = (appState, settings) => {\n  const factorPageCustomLink = [];\n  const formsNeedFactorPageCustomLink = [\n    RemediationForms.CHALLENGE_AUTHENTICATOR,\n    RemediationForms.SELECT_AUTHENTICATOR_AUTHENTICATE,\n    RemediationForms.CHALLENGE_POLL,\n    RemediationForms.AUTHENTICATOR_VERIFICATION_DATA,\n  ];\n\n  if (!appState.get('isPasswordRecovery') && formsNeedFactorPageCustomLink.includes(appState.get('currentFormName'))) {\n    const helpLinksFactorPageLabel = settings.get('helpLinks.factorPage.text');\n    const helpLinksFactorPageHref = settings.get('helpLinks.factorPage.href');\n\n    if (helpLinksFactorPageLabel && helpLinksFactorPageHref) {\n      factorPageCustomLink.push({\n        type: 'link',\n        label: helpLinksFactorPageLabel,\n        name: 'factorPageHelpLink',\n        href: helpLinksFactorPageHref,\n        target: '_blank',\n      });\n    }\n  }\n  return factorPageCustomLink;\n};\n\nexport {\n  getSwitchAuthenticatorLink,\n  getForgotPasswordLink,\n  goBackLink,\n  getSignUpLink,\n  getSignOutLink,\n  getBackToSignInLink,\n  getSkipSetupLink,\n  getReloadPageButtonLink,\n  getFactorPageCustomLink,\n};\n","import { View, _, $} from '@okta/courage';\nimport Link from '../components/Link';\nimport ToggleTextLink from '../components/ToggleTextLink';\nimport { getSignOutLink } from '../utils/LinksUtil';\n\n/**\n * When `href` is present, the Link behaviors as normal link (anchor element).\n * When `actionPath` is present, the Link behaviors as link button\n *   on which user clicks, will trigger the action `actionPath`.\n * When `formName` is present, the link behaviors as link button\n *   on which user clicks, will submit a remediation form.\n *\n * @typedef {Object} Link\n * @property {string} label\n * @property {string} name\n * @property {string=} href\n * @property {string=} actionPath\n * @property {string=} formName\n */\n\n\nexport default View.extend({\n\n  className: 'auth-footer',\n\n  /**\n   * {Link[]} links\n   */\n  links: [],\n\n  /**\n   * View\n   * adds any view to the footer in footer info section\n   */ \n  footerInfo: null,\n\n  /**\n   * Boolean\n   * If false then 'Back to sign in' does not get added to the view\n   */\n  hasBackToSignInLink: true,\n\n  initialize() {\n    let links = _.resultCtx(this, 'links', this);\n    const footerInfo = _.resultCtx(this, 'footerInfo', this);\n    const hasBackToSignInLink = _.resultCtx(this, 'hasBackToSignInLink', this);\n\n    // safe check\n    // 1. avoid none array from override\n    // 2. ignore any none plain object arguments\n    if (!Array.isArray(links)) {\n      links = [];\n    } else {\n      links = links.filter(l => $.isPlainObject(l));\n    }\n\n    // add 'back to sign in' link if the form qualifies for it by default.\n    // Previously called cancel/Sign Out links\n    if (this.options.appState.shouldShowSignOutLinkInCurrentForm(\n      this.options.settings.get('features.hideSignOutLinkInMFA') ||\n      this.settings.get('features.mfaOnlyFlow')) && hasBackToSignInLink) {\n      links = links.concat(getSignOutLink(this.options.settings));\n    }\n\n    links.forEach(link => {\n      let LinkView = Link;\n      if (link.type === 'toggle-text-link') {\n        LinkView = ToggleTextLink;\n      }\n      this.add(LinkView, { options: link });\n    });\n\n    if (footerInfo) {\n      this.add(View.extend({\n        className: 'footer-info',\n      }));\n\n      this.add(footerInfo, '.footer-info');\n    }\n  }\n});\n","import { createButton, loc } from '@okta/courage';\nimport { FORMS as RemediationForms } from '../../ion/RemediationConstants';\n\nconst skipAll = createButton({\n  className: 'button-primary button skip-all',\n  title: function() {\n    return loc('oie.optional.authenticator.button.title', 'login');\n  },\n  click: function() {\n    this.options.appState.trigger('invokeAction', RemediationForms.SKIP);\n  }\n});\n\nexport default skipAll;","export const SHOW_RESEND_TIMEOUT = 30000;\nexport const WARNING_TIMEOUT = 30000;\nexport const CHALLENGE_TIMEOUT = 300000;\nexport const MS_PER_SEC = 1000;\nexport const UNIVERSAL_LINK_POST_DELAY = 500;\nexport const CANCEL_POLLING_ACTION = 'authenticatorChallenge-cancel';\nexport const AUTHENTICATOR_CANCEL_ACTION = 'currentAuthenticator-cancel';\nexport const WIDGET_FOOTER_CLASS = 'siw-main-footer';\nexport const FASTPASS_FALLBACK_SPINNER_TIMEOUT = 4000;\nexport const IDENTIFIER_FLOW = 'IDENTIFIER';\nexport const OV_UV_ENABLE_BIOMETRICS_FASTPASS_DESKTOP \n  = 'oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.desktop';\nexport const OV_UV_ENABLE_BIOMETRICS_FASTPASS_MOBILE \n  = 'oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.mobile';\nexport const AUTHENTICATOR_ALLOWED_FOR_OPTIONS = {\n  ANY: 'any',\n  SSO: 'sso',\n  RECOVERY: 'recovery',\n};\nexport const REQUEST_PARAM_AUTHENTICATION_CANCEL_REASON = 'reason';\nexport const LOOPBACK_RESPONSE_STATUS_CODE = 'statusCode';\nexport const AUTHENTICATION_CANCEL_REASONS = {\n  LOOPBACK_FAILURE: 'OV_UNREACHABLE_BY_LOOPBACK',\n  OV_ERROR: 'OV_RETURNED_ERROR',\n  USER_CANCELED: 'USER_CANCELED',\n};\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { ListView, loc, View, createButton } from '@okta/courage';\nimport { FORMS as RemediationForms } from '../../ion/RemediationConstants';\nimport skipAll from './SkipOptionalEnrollmentButton';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { AUTHENTICATOR_ALLOWED_FOR_OPTIONS } from '../utils/Constants';\n\nconst AuthenticatorRow = View.extend({\n  className: 'authenticator-row clearfix',\n  template: hbs`\n    <div class=\"authenticator-icon-container\">\n      {{#if logoUri}}\n        <div class=\"factor-icon authenticator-icon custom-app-logo\" role=\"img\"\n          aria-label=\"{{i18n code=\"oie.auth.logo.aria.label\" bundle=\"login\"}}\"></div>\n      {{else}}\n        <div class=\"factor-icon authenticator-icon {{iconClassName}}\" role=\"img\" \n          aria-label=\"{{i18n code=\"oie.auth.logo.aria.label\" bundle=\"login\"}}\"></div>\n      {{/if}}\n    </div>\n    <div class=\"authenticator-description\">\n      <h3 class=\"authenticator-label no-translate\">{{label}}</h3>\n      {{#if description}}\n        <p class=\"authenticator-description--text\">{{description}}</p>\n      {{/if}}\n      {{#if authenticatorUsageText}}\n        <p class=\"authenticator-usage-text\">{{authenticatorUsageText}}</p>\n      {{/if}}\n      <div class=\"authenticator-button\" {{#if buttonDataSeAttr}}data-se=\"{{buttonDataSeAttr}}\"{{/if}}></div>\n    </div>\n  `,\n  postRender: function() {\n    View.prototype.postRender.apply(this, arguments);\n    if (this.model.get('logoUri')) {\n      this.el.querySelector('.custom-app-logo').style.backgroundImage = `url(${this.model.get('logoUri')})`;\n    }\n  },\n  children: function() {\n    return [[createButton({\n      className: 'button select-factor',\n      title: function() {\n        return loc('oie.enroll.authenticator.button.text', 'login');\n      },\n      click: function() {\n        this.model.trigger('selectAuthenticator', this.model.get('value'));\n      }\n    }), '.authenticator-button']];\n  },\n  minimize: function() {\n    this.$el.addClass('authenticator-row-min');\n  },\n  getTemplateData() {\n    let authenticatorUsageText;\n    const allowedFor = this.model.get('relatesTo').allowedFor;\n\n    if (allowedFor) {\n      switch (allowedFor) {\n      case AUTHENTICATOR_ALLOWED_FOR_OPTIONS.ANY:\n        authenticatorUsageText = loc('oie.enroll.authenticator.usage.text.access.recovery', 'login');\n        break;\n      case AUTHENTICATOR_ALLOWED_FOR_OPTIONS.RECOVERY:\n        authenticatorUsageText = loc('oie.enroll.authenticator.usage.text.recovery', 'login');\n        break;\n      case AUTHENTICATOR_ALLOWED_FOR_OPTIONS.SSO:\n        authenticatorUsageText = loc('oie.enroll.authenticator.usage.text.access', 'login');\n        break;\n      }\n    }\n\n    const data = View.prototype.getTemplateData.apply(this, arguments);\n    data.authenticatorUsageText = authenticatorUsageText;\n\n    return data;\n  },\n});\n\nexport default ListView.extend({\n\n  className: 'authenticator-enroll-list authenticator-list',\n\n  item: AuthenticatorRow,\n\n  itemSelector: '.list-content',\n\n  initialize: function() {\n    this.listenTo(this.collection,'selectAuthenticator', function(data) {\n      this.model.set(this.options.name, data);\n      this.options.appState.trigger('saveForm', this.model);\n    });\n    this.hasOptionalFactors = this.options.appState.hasRemediationObject(RemediationForms.SKIP);\n    if (this.hasOptionalFactors) {\n      this.add(skipAll);\n    }\n  },\n\n  template: hbs`<div class=\"list-content\"> <div class=\"authenticator-list-title\"> {{title}} </div> </div>`,\n\n  getTemplateData() {\n    // presence of the skip remediation form tells us that the authenticators are all optional\n    const title = this.hasOptionalFactors? loc('oie.setup.optional', 'login'):loc('oie.setup.required', 'login');\n\n    return {\n      title\n    };\n  }\n\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { ListView, View, createButton, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst AuthenticatorRow = View.extend({\n  className: 'authenticator-row clearfix',\n  template: hbs`\n    <div class=\"authenticator-icon-container\">\n      {{#if logoUri}}\n        <div class=\"factor-icon authenticator-icon {{iconClassName}} custom-logo\" role=\"img\" \n          aria-label=\"{{i18n code=\"oie.auth.logo.aria.label\" bundle=\"login\"}}\"></div>\n      {{else}}\n        <div class=\"factor-icon authenticator-icon {{iconClassName}}\" role=\"img\" \n          aria-label=\"{{i18n code=\"oie.auth.logo.aria.label\" bundle=\"login\"}}\"></div>\n      {{/if}}\n    </div>\n    <div class=\"authenticator-description\">\n      <div>\n        <h3 class=\"authenticator-label no-translate {{#if description}}authenticator-label--small{{/if}}\">{{label}}</h3>\n        {{#if description}}\n          <p class=\"authenticator-description--text {{noTranslateClassName}}\">{{description}}</p>\n        {{/if}}\n        {{#if nickname}}\n          <p class=\"authenticator-enrollment-nickname {{noTranslateClassName}}\">{{nickname}}</p>\n        {{/if}}\n      </div>\n      <div class=\"authenticator-button\" {{#if buttonDataSeAttr}}data-se=\"{{buttonDataSeAttr}}\"{{/if}}></div>\n    </div>\n  `,\n  postRender: function() {\n    View.prototype.postRender.apply(this, arguments);\n    const logoUri = this.model.get('logoUri');\n    if (logoUri) {\n      this.el.querySelector('.custom-logo').style.backgroundImage = `url(${logoUri})`;\n    }\n  },\n  children: function(){\n    return [[createButton({\n      className: 'button select-factor',\n      title: function() {\n        return loc('oie.verify.authenticator.button.text', 'login');\n      },\n      click: function() {\n        this.model.trigger('selectAuthenticator', this.model.get('value'));\n      }\n    }), '.authenticator-button']];\n  },\n  minimize: function() {\n    this.$el.addClass('authenticator-row-min');\n  }\n});\n\nexport default ListView.extend({\n\n  className: 'authenticator-verify-list authenticator-list',\n\n  item: AuthenticatorRow,\n\n  itemSelector: '.list-content',\n\n  initialize: function() {\n    this.listenTo(this.collection,'selectAuthenticator', this.handleSelect);\n    this.listenTo(this.model, 'invalid', this.handleModelInvalid);\n  },\n  \n  handleModelInvalid(data, error) {\n    if (this.options.name in error && !this.model.get(this.options.name)) {\n      this.showAuthenticatorRequiredError();\n    }\n  },\n\n  showAuthenticatorRequiredError() {\n    const errorSummary = this.collection.length > 1\n      ? loc('account.unlock.authenticatorRequired.multiple', 'login')\n      : loc('account.unlock.authenticatorRequired.single', 'login');\n    this.model.trigger('error', this.model, { responseJSON: { errorSummary } });\n  },\n\n  handleSelect(data) {\n    //If schema contains a required identifier to fill first then validate the form\n    const validationError = this.model.validateField('identifier');\n    this.model.trigger('clearFormError');\n    if(this.model.getPropertySchema('identifier')?.required && validationError) {\n      this.model.trigger('invalid', this.model, validationError);\n    } else {\n      this.model.set(this.options.name, data);\n      this.options.appState.trigger('saveForm', this.model); \n    }\n  },\n\n  template: hbs`<div class=\"list-content\"> </div>`,\n\n});\n","/*!\n * Copyright (c) 2021, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { View } from '@okta/courage';\nimport Enums from 'util/Enums';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { WIDGET_FOOTER_CLASS } from '../../utils/Constants';\n\nconst OktaSignInWidgetOnCaptchaLoadedCallback = 'OktaSignInWidgetOnCaptchaLoaded';\nconst OktaSignInWidgetOnCaptchaSolvedCallback = 'OktaSignInWidgetOnCaptchaSolved';\n\nconst HCAPTCHA_URL = \n  `https://hcaptcha.com/1/api.js?onload=${OktaSignInWidgetOnCaptchaLoadedCallback}&render=explicit`;\nconst RECAPTCHAV2_URL = \n  `https://www.google.com/recaptcha/api.js?onload=${OktaSignInWidgetOnCaptchaLoadedCallback}&render=explicit`;\n\nexport default View.extend({\n  className: 'captcha-view',\n\n  template: hbs`\n    {{#if isCaptchaConfigured}}\\\n      <div id =\"captcha-container\"\n          class=\"{{className}}\"\n          data-sitekey=\"{{siteKey}}\"\n          data-callback=\"{{onCaptchaSolvedCallback}}\"\n          data-size=\"invisible\">\n      </div>\n    {{/if}}\\\n  `,\n\n  getTemplateData: function() {\n    if (this.captchaConfig) {\n      const className = this.captchaConfig.type === 'HCAPTCHA' ? 'h-captcha' : 'g-recaptcha';\n      return { \n        siteKey: this.captchaConfig.siteKey,\n        isCaptchaConfigured: true,\n        onCaptchaSolvedCallback: OktaSignInWidgetOnCaptchaSolvedCallback,\n        className, \n      };\n    } else {\n      return {};\n    }\n  },\n\n  initialize() {\n    if (this.options.appState.get('captcha')) {\n      this.captchaConfig = this.options.appState.get('captcha');\n      this._addCaptcha();\n    }\n  },\n\n  remove: function(){\n    View.prototype.remove.apply(this, arguments);\n\n    // Cleanup global Captcha references\n    if (this.captchaConfig.type === 'HCAPTCHA') {\n      window.hcaptcha = undefined;\n    } else if (this.captchaConfig.type === 'RECAPTCHA_V2') {\n      window.grecaptcha = undefined;\n    }\n  },\n\n  /**\n   *  Load the CAPTCHA lib dynamically (either HCAPTCHA or RECAPTCHAV2). Once loaded, trigger an event to inform\n   *  the parent form to actually render the CAPTCHA.\n  * */   \n  _addCaptcha() {\n    // Callback invoked when CAPTCHA is solved.\n    const onCaptchaSolved = (token) => {\n      const captchaObject = this._getCaptchaOject();\n\n      // We reset the Captcha. We need to reset because every time the \n      // Captcha resolves back with a token and say we have a server side error, \n      // if we submit the form again it won't work otherwise. The Captcha \n      // has to be reset for it to work again in that scenario.\n      const captchaId = this.$el.find('#captcha-container').attr('data-captcha-id');\n      captchaObject.reset(captchaId);\n\n      // Set the token in the model\n      const fieldName = this.options.name;\n      this.model.set(fieldName, token);\n\n      this.options.appState.trigger('saveForm', this.model); \n    };\n\n    // Callback when CAPTCHA lib is loaded\n    const onCaptchaLoaded = () => {\n      // This is just a safeguard to ensure we don't bind Captcha to an already bound element.\n      // It shouldn't happen in practice.\n      if (this.$el.find('#captcha-container').attr('data-captcha-id')) {\n        return;\n      }\n\n      const captchaObject = this._getCaptchaOject();\n\n      // We set a temporary token for Captcha because this is a required field for the form and is normally set\n      // at a later time. In order to prevent client-side validation errors because of this, we have to set a \n      // dummy value. We then overwrite this with the proper token in the onCaptchaSolved callback.\n      this.model.set(this.options.name, 'tempToken');\n\n      const captchaId = captchaObject.render('captcha-container', {\n        sitekey: this.captchaConfig.siteKey,\n        callback: onCaptchaSolved\n      });\n      \n      this.$el.find('#captcha-container').attr('data-captcha-id', captchaId);\n\n      // Let the Baseform know that Captcha is loaded.\n      this.options.appState.trigger('onCaptchaLoaded', captchaObject);\n\n      // Render the HCAPTCHA footer - we need to do this manually since the HCAPTCHA lib doesn't do it\n      if (this.captchaConfig.type === 'HCAPTCHA') {\n        this._addHCaptchaFooter();\n      }  \n    };\n\n    // Attaching the callback to the window object so that the CAPTCHA script that we dynamically render\n    // can have access to it since it won't have access to this view's scope.\n    window[OktaSignInWidgetOnCaptchaLoadedCallback] = onCaptchaLoaded;\n\n    // Attaching the Captcha solved callback to the window object because we reference it in our template under\n    // the 'data-callback' attribute which the Captcha library uses to invoke the callback.\n    window[OktaSignInWidgetOnCaptchaSolvedCallback] = onCaptchaSolved;\n\n    \n    if (this.captchaConfig.type === 'HCAPTCHA') {\n      this._loadCaptchaLib(this._getCaptchaUrl(HCAPTCHA_URL));\n    } else if (this.captchaConfig.type === 'RECAPTCHA_V2') {\n      this._loadCaptchaLib(this._getCaptchaUrl(RECAPTCHAV2_URL));\n    }\n  },\n  \n  /**\n   *  We dynamically inject <script> tag into our login container because in case the customer is hosting\n   *  the SIW, we need to ensure we don't go out of scope when injecting the script.\n  * */ \n  _loadCaptchaLib(url) {\n    let scriptTag = document.createElement('script');\n    scriptTag.src = url;\n    scriptTag.async = true;\n    scriptTag.defer = true;\n    document.getElementById(Enums.WIDGET_CONTAINER_ID).appendChild(scriptTag);\n  },\n\n  _addHCaptchaFooter() {\n    // NOTE: insetAdjacentHTML() is supported in all major browsers: \n    // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML#browser_compatibility\n    const footerContainer = document.getElementsByClassName(WIDGET_FOOTER_CLASS);\n    if (footerContainer.length) {\n      const template = hbs('<div class=\"captcha-footer\">\\\n        <span class=\"footer-text\">\\\n          {{i18n code=\"hcaptcha.footer.label\" bundle=\"login\" \\\n          $1=\"<a href=\\'https://hcaptcha.com/privacy\\' target=\\'_blank\\'>$1</a>\" \\\n          $2=\"<a href=\\'https://hcaptcha.com/terms\\' target=\\'_blank\\'>$2</a>\"}}\\\n        </span>\\\n      </div>');\n\n      footerContainer[0].insertAdjacentHTML('beforeend',\n        template()\n      );\n    }\n  },\n\n  _getCaptchaOject() {\n    const captchaObject = this.captchaConfig.type === 'HCAPTCHA' ? window.hcaptcha : window.grecaptcha;\n    return captchaObject;\n  },\n\n  _getCaptchaUrl(baseURL) {\n    const locale = this.options.settings.get('language');\n    return `${baseURL}&hl=${locale || navigator.language}`;\n  }\n});\n","import { Collection, _, loc, createButton, InputOptions } from '@okta/courage';\n\nimport AuthenticatorEnrollOptions from '../components/AuthenticatorEnrollOptions';\nimport AuthenticatorVerifyOptions from '../components/AuthenticatorVerifyOptions';\nimport { getAuthenticatorDataForEnroll, getAuthenticatorDataForVerification } from '../utils/AuthenticatorUtil';\nimport { AUTHENTICATOR_KEY, FORMS as RemediationForms } from '../../ion/RemediationConstants';\nimport IDP from 'util/IDP';\nimport AdminScopeList from 'v1/views/admin-consent/ScopeList';\nimport EnduserScopeList from 'v1/views/consent/ScopeList';\nimport CaptchaView from '../views/captcha/CaptchaView';\n\nconst isTextOverflowing = (text, maxWidth) => {\n  // Create a temporary element and attach it to the document so we can compare the client width to the \n  // max width allowed.\n  const elem = document.createElement('div');\n  elem.style.position = 'absolute';\n  elem.style.left = '-9999px';\n  elem.style.whiteSpace = 'nowrap';\n  elem.innerHTML = text;\n\n  document.body.appendChild(elem);\n  const result = elem.clientWidth;\n  document.body.removeChild(elem);\n\n  return result > maxWidth;\n};\n\nconst createAuthenticatorEnrollSelectView = (opt) => {\n  const optionItems = (opt.options || [])\n    .map(opt => {\n      return Object.assign({}, opt, getAuthenticatorDataForEnroll(opt));\n    });\n  return {\n    View: AuthenticatorEnrollOptions,\n    options: {\n      name: opt.name,\n      collection: new Collection(optionItems),\n    }\n  };\n};\n\nconst createAuthenticatorVerifySelectView = (opt) => {\n  let optionItems = (opt.options || []);\n  // If webauthn enrollments > 1 just show one entry with a generic namne (first) so user doesnt have to select which\n  // one to pick. eg) If there is yubikey5 and another unknown u2f key, user cannot identify that easily. We need to\n  // do this at least  until users can give authenticator enrollments custom names.\n  const authSet = new Set();\n  optionItems = optionItems.filter(opt => {\n    let isDuplicate;\n    if (opt.authenticatorKey === AUTHENTICATOR_KEY.WEBAUTHN) {\n      isDuplicate = authSet.has(opt.authenticatorKey);\n      authSet.add(opt.authenticatorKey);\n    } else if(opt.authenticatorKey === AUTHENTICATOR_KEY.CUSTOM_APP) {\n      // Filter the duplicate enrollment by id for custom app. \n      isDuplicate = authSet.has(opt?.value?.id);\n      authSet.add(opt?.value?.id);\n    }  \n    return !isDuplicate;\n  });\n  optionItems = optionItems.map(opt => {\n    return Object.assign({}, opt, getAuthenticatorDataForVerification(opt));\n  });\n  return {\n    View: AuthenticatorVerifyOptions,\n    options: {\n      name: opt.name,\n      collection: new Collection(optionItems),\n    }\n  };\n};\n\nconst createAdminScopesView = () => {\n  return {\n    View: AdminScopeList,\n  };\n};\nconst createEnduserScopesView = () => {\n  return {\n    View: EnduserScopeList,\n  };\n};\n\nconst createCaptchaView = (opt) => {\n  return {\n    View: CaptchaView,\n    options: {\n      name: opt.name,\n    }    \n  };\n};\n\nconst inputCreationStrategy = {\n  authenticatorEnrollSelect: createAuthenticatorEnrollSelectView,\n  authenticatorVerifySelect: createAuthenticatorVerifySelectView,\n  ['admin-consent']: createAdminScopesView,\n  ['consent']: createEnduserScopesView,\n  ['captcha']: createCaptchaView,\n};\n\n// TODO: move logic to uiSchemaTransformer\nconst create = function(uiSchemaObj) {\n  const strategyFn = inputCreationStrategy[uiSchemaObj.type] || _.identity;\n  return strategyFn(uiSchemaObj);\n};\n\nconst createPIVButton = (settings, appState) => {\n  const pivIdp =\n    appState.get('remediations').filter(idp => idp.name === RemediationForms.PIV_IDP);\n  if (pivIdp.length < 1) {\n    return [];\n  }\n  const pivConfig = settings.get('piv');\n  const className = pivConfig.className || '';\n  return [{\n    attributes: {\n      'data-se': 'piv-card-button',\n    },\n    className: className + ' piv-button',\n    title: pivConfig.text || loc('piv.cac.card', 'login'),\n    click: (e) => {\n      e.preventDefault();\n      appState.trigger('switchForm', RemediationForms.PIV_IDP);\n    },\n  }];\n};\n\n/**\n * Example of `redirect-idp` remediation.\n * {\n *   \"name\": \"redirect-idp\",\n *   \"type\": \"MICROSOFT\",\n *   \"idp\": {\n *      \"id\": \"0oa2szc1K1YPgz1pe0g4\",\n *      \"name\": \"Microsoft IDP\"\n *    },\n *   \"href\": \"http://localhost:3000/sso/idps/0oa2szc1K1YPgz1pe0g4?stateToken=BB...AA\",\n *   \"method\": \"GET\"\n * }\n *\n */\nconst createIdpButtons = ({ settings, appState }) => {\n  // This is the max allowable text width that we can display for IDP buttons.\n  // Generated by taking the 316px width of button minus padding-left (90 px) and padding-right (50px)\n  const MAX_IDP_BUTTON_WIDTH = 186;\n\n  const redirectIdpRemediations =\n    appState.get('remediations').filter(idp => idp.name === RemediationForms.REDIRECT_IDP);\n\n  if (!Array.isArray(redirectIdpRemediations)) {\n    return [];\n  }\n\n  // create piv button\n  const pivButton = createPIVButton(settings, appState);\n\n  //add buttons from idp object\n  const idpButtons = redirectIdpRemediations.map(idpObject => {\n    let type = idpObject.type?.toLowerCase();\n    let displayName;\n\n    if (!_.contains(IDP.SUPPORTED_SOCIAL_IDPS, type)) {\n      type = 'general-idp';\n      // OKTA-396684 - makes sure that custom idps always have a name\n      displayName = loc('customauth.sign.in.with.label', 'login', [idpObject.idp?.name]);\n    } else {\n      displayName = loc(`socialauth.${type}.label`, 'login');\n    }\n\n    const classNames = [\n      'social-auth-button',\n      `social-auth-${type}-button`,\n    ];\n\n    if (type === 'general-idp') {\n      classNames.push('no-translate');\n    }\n\n    if (idpObject.idp.className) {\n      classNames.push(idpObject.idp.className);\n    }\n\n    const button: InputOptions = {\n      attributes: {\n        'data-se': `social-auth-${type}-button`,\n      },\n      className: classNames.join(' '),\n      title: displayName,\n      href: idpObject.href,\n    };\n\n    if (isTextOverflowing(displayName, MAX_IDP_BUTTON_WIDTH)) {\n      // We add a tooltip in case the name gets truncated if too long\n      button.attributes.title = displayName;\n    }\n\n    return button;\n  });\n\n  return [...pivButton, ...idpButtons];\n};\n\nconst createCustomButtons = (settings) => {\n  const customButtons = settings.get('customButtons');\n  return customButtons.map(customButton => {\n    const button = {\n      attributes: {\n        'data-se': customButton.dataAttr\n      },\n      className: customButton.className + ' default-custom-button',\n      title: customButton.title || loc(customButton.i18nKey, 'login'),\n      click: customButton.click\n    };\n    return button;\n  });\n};\n\nconst addCustomButton = (customButtonSettings) => {\n  return createButton({\n    ...customButtonSettings,\n    className: `${customButtonSettings.className} default-custom-button button-primary`,\n  });\n};\n\nexport {\n  create,\n  createIdpButtons,\n  createCustomButtons,\n  addCustomButton,\n  isTextOverflowing\n};\n","import hbs from '@okta/handlebars-inline-precompile';\n\nimport { _, Form, loc, internal, createCallout, View } from '@okta/courage';\nimport * as FormInputFactory from './FormInputFactory';\n\nconst { FormUtil } = internal.views.forms.helpers;\nconst INFO_MESSAGE_CLASS = 'INFO';\n\nexport default Form.extend({\n\n  layout: 'o-form-theme',\n  className: 'ion-form',\n  hasSavingState: true,\n  autoSave: false,\n  noCancelButton: true,\n\n  title() {\n    return loc('oform.title.authenticate', 'login');\n  },\n\n  save() {\n    return loc('oform.next', 'login');\n  },\n\n  modelEvents: {\n    'clearFormError': 'handleClearFormError',\n    'error': 'triggerAfterError',\n  },\n\n  initialize() {\n    const uiSchemas = this.getUISchema();\n    const inputOptions = uiSchemas.map(FormInputFactory.create);\n\n    //should be used before adding any other input components\n    this.showMessages();\n\n    // Render CAPTCHA if one of the form fields requires us to.\n    this.listenTo(this.options.appState, 'onCaptchaLoaded', (captchaObject) => {\n      this.captchaObject = captchaObject;\n    });\n\n    inputOptions.forEach(input => {\n      this.addInputOrView(input);\n    });\n\n    this.listenTo(this, 'save', this.saveForm);\n    this.listenTo(this, 'cancel', this.cancelForm);\n  },\n\n  focus(...args) {\n    if (this.settings.get('features.autoFocus')) {\n      Form.prototype.focus.apply(this, args);\n    }\n  },\n\n  handleClearFormError() {\n    const formErrorContainer = this.$('.o-form-error-container');\n    formErrorContainer.empty();\n    if (formErrorContainer.hasClass('o-form-has-errors')) {\n      this.clearErrors();\n    }\n  },\n\n  triggerAfterError(model, error) {\n    this.options.appState.trigger('afterError', error);\n  },\n\n  saveForm(model) {\n    //remove any existing warnings or messages before saving form\n    this.$el.find('.o-form-error-container').empty();\n\n    // Execute Captcha if enabled for this form.\n    if (this.captchaObject) {\n      this.captchaObject.execute();\n    } else {\n      this.options.appState.trigger('saveForm', model);\n    }\n  },\n\n  postRender() {\n    /**\n     * Widget would use infoContainer to display interactive messages that should be persisted during\n     * invalid form submissions. For eg resend-warning callout should not be cleared upon invalid form submit.\n     * Rerender would clear infoContainer or views classes can clear it explicitly.\n     */\n    const infoContainer= '<div class=\\'o-form-info-container\\'></div>';\n    this.$el.find('.o-form-error-container')\n      .attr('role', 'alert')\n      .before(infoContainer);\n\n    this.addIdentifier();\n  },\n\n  /**\n   * Render user identifier below title, or if no title, render below message.\n   */\n  addIdentifier() {\n    const { identifier } = this.options.appState.get('user') || {};\n    if (!identifier) {\n      return;\n    } else if (!this.settings.get('features.showIdentifier')) {\n      return;\n    }\n\n    const header = this.$el.find('[data-se=\"o-form-head\"]');\n    const identifierHTMLString = hbs('<div class=\"identifier-container\">\\\n        <span class=\"identifier no-translate\" data-se=\"identifier\" title={{identifier}}>{{identifier}}</span>\\\n      </div>')({identifier});\n\n    if (header.length) {\n      header.after(identifierHTMLString);\n    } else {\n      this.$el.find('.o-form-error-container').after(identifierHTMLString);\n    }\n  },\n\n  cancelForm() {\n    this.options.appState.trigger('invokeAction', 'cancel');\n  },\n\n  getUISchema() {\n    if (Array.isArray(this.options.currentViewState.uiSchema)) {\n      return this.options.currentViewState.uiSchema;\n    } else {\n      return [];\n    }\n  },\n\n  addInputOrView(input) {\n    if (input.visible === false || (input.mutable === false && input.visible !== true)) {\n      return;\n    }\n    if (input.View) {\n      this.add(input.View, _.omit(input, 'View', 'showWhen'));\n      if (input.showWhen) {\n        FormUtil.applyShowWhen(this.last(), input.showWhen);\n      }\n    } else {\n      this.addInput(input);\n    }\n\n    if (Array.isArray(input.optionsUiSchemas)) {\n      if (this.options.optionUiSchemaConfig[input.name]) {\n        const optionUiSchemaIndex = Number(this.options.optionUiSchemaConfig[input.name]);\n        const optionUiSchemas = input.optionsUiSchemas[optionUiSchemaIndex] || [];\n        optionUiSchemas.forEach(this.addInputOrView.bind(this));\n      }\n    }\n  },\n\n  /*\n  * Views should override this function to render custom error callouts for invalid form actions.\n  * Should return true when callout is customized\n  */\n  showCustomFormErrorCallout: null,\n\n  /*\n   * Renders the contents of messages object (if any, on error) during initialize\n   * This function is called during Form.initialize, and will display\n   * messages when the form reloads.\n   * Note: Any user action related form errors handled by FormController.showFormErrors\n   */\n  showMessages(options) {\n    const messages = this.options.appState.get('messages') || {};\n    const errContainer = '.o-form-error-container';\n    if (Array.isArray(messages.value) && !(options instanceof View)) {\n      this.add('<div class=\"ion-messages-container\"></div>', errContainer);\n      messages.value.forEach(obj => {\n        if(!obj?.class || obj.class === INFO_MESSAGE_CLASS) {\n          // add message as plain text\n          this.add(`<p>${obj.message}</p>`, '.ion-messages-container');\n        } else {\n          const errorObj = {\n            class: obj?.class ?? '',\n            message: obj?.message,\n            title: '',\n            ...options\n          };\n          this.add(createCallout({\n            content: errorObj.message,\n            type: errorObj.class.toLowerCase(),\n            title: errorObj.title\n          }), errContainer);\n          options = null; // prevent repeating first error message\n        }\n      });\n    } else if (options instanceof View) {\n      // if callee is showCustomFormErrorCallout. show custom error views\n      this.add(options, errContainer);\n    }\n  },\n});","import { _ } from '@okta/courage';\nimport { MS_PER_SEC } from '../../utils/Constants';\n\nexport default {\n  startPolling(newRefreshInterval) {\n    this.fixedPollingInterval = this.options.currentViewState.refresh;\n    this.dynamicPollingInterval = newRefreshInterval;\n    this.countDownCounterValue = Math.ceil(this.pollingInterval / MS_PER_SEC);\n    // Poll is present in remediation form\n    if (this.fixedPollingInterval) {\n      this._startRemediationPolling();\n    } else {\n      // Poll is present in authenticator/ authenticator Enrollment obj.\n      // Authenticator won't co-exists hence it's safe to trigger both.\n      this._startAuthenticatorPolling();\n    }\n  },\n\n  _startAuthenticatorPolling() {\n    // Authenticator won't co-exists hence it's safe to trigger both.\n    [\n      'currentAuthenticator',\n      'currentAuthenticatorEnrollment',\n    ].some(responseKey => {\n      if (this.options.appState.has(responseKey)) {\n        const authenticator = this.options.appState.get(responseKey);\n        const authenticatorPollAction = `${responseKey}-poll`;\n        const pollInterval = this.dynamicPollingInterval || authenticator?.poll?.refresh;\n        if (_.isNumber(pollInterval)) {\n          this.polling = setTimeout(()=>{\n            this.options.appState.trigger('invokeAction', authenticatorPollAction);\n          }, pollInterval);\n        }\n        return true;\n      } else {\n        return false;\n      }\n    });\n  },\n\n  _startRemediationPolling() {\n    const pollInterval = this.dynamicPollingInterval || this.fixedPollingInterval;\n    if (_.isNumber(pollInterval)) {\n      this.polling = setTimeout(() => {\n        this.options.appState.trigger('saveForm', this.model);\n      }, pollInterval);\n    }\n  },\n\n  stopPolling() {\n    if (this.polling) {\n      clearTimeout(this.polling);\n      this.polling = null;\n    }\n  }\n};\n","import polling from '../views/shared/polling';\nimport BaseForm from './BaseForm';\n\nexport default BaseForm.extend(Object.assign(\n  {\n    initialize() {\n      BaseForm.prototype.initialize.apply(this, arguments);\n      this.listenTo(this.options.appState, 'change:dynamicRefreshInterval', this.updateRefreshInterval);\n    },\n\n    updateRefreshInterval() {\n      if (this.polling) {\n        this.stopPolling();\n        this.startPolling(this.options.appState.get('dynamicRefreshInterval'));\n      }\n    },\n  },\n  polling,\n));\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { _, Model } from '@okta/courage';\n\nconst convertUiSchemaFieldToProp = (uiSchemaField) => {\n  const config = Object.assign(\n    {},\n    _.chain(uiSchemaField)\n      .pick('minLength', 'maxLength', 'required', 'value')\n      .defaults({ type: 'string', required: true })\n      .value()\n  );\n\n  if (uiSchemaField.modelType) {\n    config.type = uiSchemaField.modelType;\n  }\n\n  return { [uiSchemaField.name]: config };\n};\n\nconst createPropsAndLocals = function(\n  remediation = {},\n  optionUiSchemaConfig = {},\n  props = {},\n  local = {}) {\n\n  const uiSchemas = remediation.uiSchema || [];\n\n  uiSchemas.forEach(schema => {\n    if (Array.isArray(schema.optionsUiSchemas)) {\n      let optionUiSchemaIndex;\n      let optionUiSchemaValue = {};\n\n      if (Number(schema.value) >= 0) {\n        optionUiSchemaIndex = schema.value;\n      }\n      if (optionUiSchemaConfig[schema.name]) {\n        optionUiSchemaValue = { value: optionUiSchemaConfig[schema.name] };\n        optionUiSchemaIndex = Number(optionUiSchemaValue.value);\n      }\n\n      Object.assign(\n        local,\n        convertUiSchemaFieldToProp(Object.assign({}, schema, optionUiSchemaValue)));\n\n      if (optionUiSchemaIndex) {\n        createPropsAndLocals(\n          { uiSchema: schema.optionsUiSchemas[optionUiSchemaIndex] },\n          optionUiSchemaConfig,\n          props,\n          local,\n        );\n      }\n    } else {\n      Object.assign(props, convertUiSchemaFieldToProp(schema));\n    }\n  });\n};\n\nconst create = function(remediation = {}, optionUiSchemaConfig = {}) {\n  const props = {};\n  const local = {\n    // current remediation form name\n    formName: 'string',\n    // use full page redirect instead of AJAX\n    useRedirect: 'boolean',\n  };\n  createPropsAndLocals(\n    remediation,\n    optionUiSchemaConfig,\n    props,\n    local);\n\n  const BaseModel = Model.extend({\n    props,\n    local,\n  });\n\n  return BaseModel;\n};\n\nexport default {\n  create,\n};\n","/* eslint complexity: [2, 25] */\nimport { AUTHENTICATOR_KEY, FORMS } from './RemediationConstants';\n\nconst FORMNAME_CLASSNAME_MAPPINGS = {\n  [FORMS.IDENTIFY]: {\n    [FORMS.IDENTIFY]: 'primary-auth',\n    [AUTHENTICATOR_KEY.PASSWORD]: 'primary-auth'\n  },\n  [FORMS.IDENTIFY_RECOVERY]: {\n    [FORMS.IDENTIFY_RECOVERY]: 'forgot-password',\n  },\n  [FORMS.ENROLL_PROFILE]: {\n    [FORMS.ENROLL_PROFILE]: 'registration',\n  },\n  [FORMS.CHALLENGE_AUTHENTICATOR]: {\n    [AUTHENTICATOR_KEY.EMAIL]: 'mfa-verify-passcode',\n    [AUTHENTICATOR_KEY.PASSWORD]: 'mfa-verify-password',\n    sms: 'mfa-verify-passcode',\n    voice: 'mfa-verify-passcode',\n    [AUTHENTICATOR_KEY.SECURITY_QUESTION]: 'mfa-verify-question',\n    [AUTHENTICATOR_KEY.WEBAUTHN]: 'mfa-verify-webauthn',\n    [AUTHENTICATOR_KEY.ON_PREM]: 'mfa-verify-totp',\n    [AUTHENTICATOR_KEY.RSA]: 'mfa-verify-totp',\n    [AUTHENTICATOR_KEY.OV]: 'mfa-verify',\n    [AUTHENTICATOR_KEY.GOOGLE_OTP]: 'mfa-verify',\n    [AUTHENTICATOR_KEY.DUO]: 'mfa-verify-duo',\n    [AUTHENTICATOR_KEY.SYMANTEC_VIP]: 'mfa-verify',\n    [AUTHENTICATOR_KEY.YUBIKEY]: 'mfa-verify',\n    [AUTHENTICATOR_KEY.CUSTOM_APP]: 'mfa-verify',\n  },\n  [FORMS.CHALLENGE_POLL]: {\n    [AUTHENTICATOR_KEY.OV]: 'mfa-verify',\n    [AUTHENTICATOR_KEY.CUSTOM_APP]: 'mfa-verify',\n  },\n  [FORMS.RESEND_PUSH]: {\n    [AUTHENTICATOR_KEY.OV]: 'mfa-verify',\n    [AUTHENTICATOR_KEY.CUSTOM_APP]: 'mfa-verify',\n  },\n  [FORMS.ENROLL_AUTHENTICATOR]: {\n    [AUTHENTICATOR_KEY.EMAIL]: 'enroll-email',\n    [AUTHENTICATOR_KEY.PASSWORD]: 'enroll-password',\n    sms: 'enroll-sms',\n    voice: 'enroll-call',\n    [AUTHENTICATOR_KEY.SECURITY_QUESTION]: 'enroll-question',\n    [AUTHENTICATOR_KEY.WEBAUTHN]: 'enroll-webauthn',\n    [AUTHENTICATOR_KEY.ON_PREM]: 'enroll-onprem',\n    [AUTHENTICATOR_KEY.RSA]: 'enroll-rsa',\n    [AUTHENTICATOR_KEY.DUO]: 'enroll-duo',\n    [AUTHENTICATOR_KEY.SYMANTEC_VIP]: 'enroll-symantec',\n    [AUTHENTICATOR_KEY.YUBIKEY]: 'enroll-yubikey',\n  },\n\n  [FORMS.SELECT_AUTHENTICATOR_ENROLL]: {\n    'select-authenticator-enroll': 'enroll-choices'\n  },\n  [FORMS.SELECT_AUTHENTICATOR_AUTHENTICATE]: {\n    [AUTHENTICATOR_KEY.PASSWORD]: 'forgot-password'\n  },\n  [FORMS.REENROLL_AUTHENTICATOR]: {\n    [AUTHENTICATOR_KEY.PASSWORD]: 'password-expired'\n  },\n  [FORMS.REENROLL_CUSTOM_PASSWORD_EXPIRY]: {\n    [AUTHENTICATOR_KEY.PASSWORD]: 'custom-password-expired'\n  },\n  [FORMS.REENROLL_CUSTOM_PASSWORD_EXPIRY_WARNING]: {\n    [AUTHENTICATOR_KEY.PASSWORD]: 'custom-password-expiry-warning'\n  },\n\n  [FORMS.RESET_AUTHENTICATOR]: {\n    [AUTHENTICATOR_KEY.PASSWORD]: 'forgot-password'\n  },\n\n  [FORMS.CONSENT_ADMIN]: {\n    [FORMS.CONSENT_ADMIN]: 'admin-consent-required',\n  },\n\n  [FORMS.CONSENT_ENDUSER]: {\n    [FORMS.CONSENT_ENDUSER]: 'consent-required',\n  }\n};\n\nconst getV1ClassName = (formName, authenticatorKey, methodType, isPasswordRecoveryFlow) => {\n  // if password reset flow from identifier page with recoveryAuthenticator add forgot-password class\n  if (isPasswordRecoveryFlow && formName === FORMS.IDENTIFY) {\n    return 'forgot-password';\n  } else {\n    let key = formName;\n    if (authenticatorKey === AUTHENTICATOR_KEY.PHONE) {\n      // Both sms and call have same type phone\n      // currentAuthenticatorEnrollment is during verify and currentAuthenticator during enroll flows\n      key = `${methodType}`;\n    }\n    else if (authenticatorKey) {\n      key = `${authenticatorKey}`;\n    }\n\n    if (FORMNAME_CLASSNAME_MAPPINGS[formName] && FORMNAME_CLASSNAME_MAPPINGS[formName][key]) {\n      return FORMNAME_CLASSNAME_MAPPINGS[formName][key];\n    } else {\n      return null;\n    }\n  }\n};\n\nconst getClassNameMapping = (formName, authenticatorKey, methodType, isPasswordRecoveryFlow) => {\n\n  // 1. Generates V2 class name\n  // If we have a type which is authenticatorType/methodType use that to generate a V2 className\n  // Otherwise just use formName\n  let v2ClassName = formName;\n  if (authenticatorKey) {\n    v2ClassName = v2ClassName + '--' + authenticatorKey;\n  }\n\n  // 2. do a lookup for any V1 classNames and concat\n  let v1ClassName = getV1ClassName(\n    formName,\n    authenticatorKey,\n    methodType,\n    isPasswordRecoveryFlow,\n  );\n  const result = [v2ClassName];\n  if (v1ClassName) {\n    result.push(v1ClassName);\n  }\n\n  return result;\n};\n\nexport {\n  getClassNameMapping,\n  getV1ClassName\n};\n\n","import { _, View } from '@okta/courage';\nimport BaseHeader from './BaseHeader';\nimport BaseForm from './BaseForm';\nimport BaseModel from './BaseModel';\nimport BaseFooter from './BaseFooter';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport {getClassNameMapping} from '../../ion/ViewClassNamesFactory';\n\nexport default View.extend({\n\n  Header: BaseHeader,\n\n  Body: BaseForm,\n\n  Footer: BaseFooter,\n\n  className() {\n    const appState = this.options.appState;\n\n    const formName = appState.get('currentFormName');\n    const authenticatorKey = appState.get('authenticatorKey');\n    const methodType = appState.get('authenticatorMethodType');\n    const isPasswordRecoveryFlow = appState.get('isPasswordRecoveryFlow');\n\n    const additionalClassNames = getClassNameMapping(\n      formName,\n      authenticatorKey,\n      methodType,\n      isPasswordRecoveryFlow,\n    );\n\n    const classNames = ['siw-main-view'].concat(additionalClassNames);\n    return classNames.join(' ');\n  },\n\n  template: hbs`\n    <div class=\"siw-main-header\"></div>\n    <div class=\"siw-main-body\"></div>\n    <div class=\"siw-main-footer\"></div>\n  `,\n\n  preRender() {\n    View.prototype.preRender.apply(this, arguments);\n    // Add Views\n    if (this.Header !== null) {\n      this.add(this.Header, {\n        selector: '.siw-main-header',\n        options: this.options,\n      });\n    }\n    this.renderForm();\n    this.add(this.Footer, {\n      selector : '.siw-main-footer',\n      options: this.options,\n    });\n  },\n\n  renderForm() {\n    let optionUiSchemaConfig;\n\n    if (this.form) {\n      this.form.remove();\n      optionUiSchemaConfig = this.form.model.toJSON({verbose: true});\n    }\n\n    // Create Model\n    const IonModel = this.createModelClass(\n      this.options.currentViewState,\n      optionUiSchemaConfig,\n      this.settings,\n    );\n\n    const model = new IonModel ({\n      formName: this.options.currentViewState.name,\n    });\n\n    if (!optionUiSchemaConfig) {\n      optionUiSchemaConfig = model.toJSON({verbose: true});\n    }\n\n    this.model = model;\n    this.form = this.add(this.Body, {\n      selector : '.siw-main-body',\n      options: Object.assign(\n        {},\n        this.options,\n        {\n          model,\n          optionUiSchemaConfig,\n        },\n      ),\n    }).last();\n\n    _.each(model.attributes, (value, key) => {\n      if (key.match(/sub_schema_local_[^ ]+/)) {\n        // in order to render different sub-schema\n        this.listenTo(model, `change:${key}`, () => {\n          this.renderForm();\n        });\n      }\n    });\n  },\n\n  createModelClass(currentViewState, optionUiSchemaConfig = {}) {\n    return BaseModel.create(currentViewState, optionUiSchemaConfig);\n  },\n\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { loc, View, createButton, _ } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\nimport Util from 'util/Util';\nimport {\n  FASTPASS_FALLBACK_SPINNER_TIMEOUT,\n  IDENTIFIER_FLOW,\n  LOOPBACK_RESPONSE_STATUS_CODE,\n  OV_UV_ENABLE_BIOMETRICS_FASTPASS_DESKTOP, \n  OV_UV_ENABLE_BIOMETRICS_FASTPASS_MOBILE,\n  REQUEST_PARAM_AUTHENTICATION_CANCEL_REASON,\n} from '../utils/Constants';\n\nexport function appendLoginHint(deviceChallengeUrl, loginHint) {\n  if (deviceChallengeUrl && loginHint) {\n    deviceChallengeUrl += '&login_hint=' + loginHint;\n  }\n\n  return deviceChallengeUrl;\n}\n\nexport function doChallenge(view, fromView) {\n  const deviceChallenge = view.getDeviceChallengePayload();\n  const loginHint = view.options?.settings?.get('identifier');\n  const HIDE_CLASS = 'hide';\n  switch (deviceChallenge.challengeMethod) {\n  case Enums.LOOPBACK_CHALLENGE:\n    view.title = loc('deviceTrust.sso.redirectText', 'login');\n    view.add(View.extend({\n      className: 'loopback-content',\n      template: hbs`<div class=\"spinner\"></div>`\n    }));\n    view.doLoopback(deviceChallenge);\n    break;\n  case Enums.CUSTOM_URI_CHALLENGE:\n    view.title = loc('customUri.title', 'login');\n    view.add(View.extend({\n      className: 'skinny-content',\n      template: hbs`\n            <p>\n              {{i18n code=\"customUri.required.content.prompt\" bundle=\"login\"}}\n            </p>\n          `,\n    }));\n    view.add(createButton({\n      className: 'ul-button button button-wide button-primary',\n      title: loc('oktaVerify.open.button', 'login'),\n      id: 'launch-ov',\n      click: () => {\n        view.doCustomURI();\n      }\n    }));\n    view.add(View.extend({\n      className: 'skinny-content',\n      template: hbs`\n          <p>\n            {{i18n code=\"customUri.required.content.download.title\" bundle=\"login\"}}\n          </p>\n          <p>\n            <a href=\"{{downloadOVLink}}\" target=\"_blank\" id=\"download-ov\" class=\"link\">\n              {{i18n code=\"customUri.required.content.download.linkText\" bundle=\"login\"}}\n            </a>\n          </p>\n          `,\n      getTemplateData() {\n        return {\n          downloadOVLink: deviceChallenge.downloadHref\n        };\n      },\n    }));\n    view.customURI = appendLoginHint(deviceChallenge.href, loginHint);\n    view.doCustomURI();\n    break;\n  case Enums.UNIVERSAL_LINK_CHALLENGE:\n    view.title = loc('universalLink.title', 'login');\n    view.add(View.extend({\n      className: 'universal-link-content',\n      template: hbs`\n            <div class=\"spinner\"></div>\n            {{i18n code=\"universalLink.content\" bundle=\"login\"}}\n          `\n    }));\n    view.add(createButton({\n      className: 'ul-button button button-wide button-primary',\n      title: loc('oktaVerify.open.button', 'login'),\n      click: () => {\n        // only window.location.href can open universal link in iOS/MacOS\n        // other methods won't do, ex, AJAX get or form get (Util.redirectWithFormGet)\n        let deviceChallengeUrl = appendLoginHint(deviceChallenge.href, loginHint);\n        Util.redirect(deviceChallengeUrl);\n      }\n    }));\n    break;\n  case Enums.APP_LINK_CHALLENGE:\n    view.title = loc('appLink.title', 'login');\n    view.add(View.extend({\n      className: 'app-link-content',\n      template: hbs`\n        <div class=\"spinner {{hideClass}}\"></div>\n        <div class=\"appLinkContent {{hideClass}}\">{{i18n code=\"appLink.content\" bundle=\"login\"}}</div>\n      `,\n      getTemplateData() {\n        return { hideClass: HIDE_CLASS };\n      },\n      postRender() {\n        if (fromView === IDENTIFIER_FLOW) {\n          this.$('.spinner').removeClass(HIDE_CLASS);\n          setTimeout(_.bind(()=> {\n            const data = { label: loc('goback', 'login') };\n            this.options.appState.trigger('updateFooterLink', data);\n            this.$('.spinner').addClass(HIDE_CLASS);\n            this.$('.appLinkContent').removeClass(HIDE_CLASS);\n          }, this), FASTPASS_FALLBACK_SPINNER_TIMEOUT);\n        } else {\n          this.$('.appLinkContent').removeClass(HIDE_CLASS);\n        }\n      },\n    }));\n    view.add(createButton({\n      className: `${HIDE_CLASS} al-button button button-wide button-primary`,\n      title: loc('oktaVerify.open.button', 'login'),\n      click: () => {\n        // only window.location.href can open app link in Android\n        // other methods won't do, ex, AJAX get or form get (Util.redirectWithFormGet)\n        let deviceChallengeUrl = appendLoginHint(deviceChallenge.href, loginHint);\n        Util.redirect(deviceChallengeUrl, window, true);\n      },\n      postRender() {\n        if (fromView === IDENTIFIER_FLOW) {\n          setTimeout(_.bind(()=> {\n            this.$el.removeClass(HIDE_CLASS);\n          }, this), FASTPASS_FALLBACK_SPINNER_TIMEOUT);\n        } else {\n          this.$el.removeClass(HIDE_CLASS);\n        }\n      }\n    }));\n    break;\n  case Enums.CHROME_DTC:\n    view.title = loc('chrome_dtc.title', 'login');\n    view.add(View.extend({\n      className: 'chrome-dtc-content',\n      template: hbs`\n            <div class=\"spinner\"></div>\n          `\n    }));\n    view.doChromeDTC(deviceChallenge);\n    break;\n  }\n}\n\nexport function cancelPollingWithParams(appState, pollingCancelAction, cancelReason, statusCode) {\n  const actionParams = {};\n  actionParams[REQUEST_PARAM_AUTHENTICATION_CANCEL_REASON] = cancelReason;\n  actionParams[LOOPBACK_RESPONSE_STATUS_CODE] = statusCode;\n  appState.trigger('invokeAction', pollingCancelAction, actionParams);\n}\n\nexport function getBiometricsErrorOptions(error, isMessageObj) {\n  let errorSummaryKeys;\n  if (isMessageObj) {\n    errorSummaryKeys  = Object.values(error?.value[0]?.i18n);\n  } else {\n    errorSummaryKeys = error?.responseJSON?.errorSummaryKeys;\n  }\n\n  const isBiometricsRequiredMobile = errorSummaryKeys \n      && errorSummaryKeys.includes(OV_UV_ENABLE_BIOMETRICS_FASTPASS_MOBILE);\n  const isBiometricsRequiredDesktop = errorSummaryKeys \n      && errorSummaryKeys.includes(OV_UV_ENABLE_BIOMETRICS_FASTPASS_DESKTOP);\n  let options = [];\n\n  if (!isBiometricsRequiredMobile && !isBiometricsRequiredDesktop) {\n    return options;\n  }\n\n  const bulletPoints = [\n    loc('oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.point1', 'login'),\n    loc('oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.point2', 'login'),\n    loc('oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.point3', 'login')\n  ];\n\n  // Add an additional bullet point for desktop devices\n  if (isBiometricsRequiredDesktop) {\n    bulletPoints.push(\n      loc('oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.point4', 'login')\n    );\n  }\n\n  options = {\n    type: 'error',\n    className: 'okta-verify-uv-callout-content',\n    title: loc('oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.title', 'login'),\n    subtitle: loc('oie.authenticator.oktaverify.method.fastpass.verify.enable.biometrics.description', 'login'),\n    bullets: bulletPoints,\n  };\n\n  return options;\n}\n","import { $, View } from '@okta/courage';\nimport { BaseFormWithPolling } from '../internals';\nimport Logger from 'util/Logger';\nimport {\n  AUTHENTICATOR_CANCEL_ACTION,\n  AUTHENTICATION_CANCEL_REASONS,\n  CHALLENGE_TIMEOUT,\n} from '../utils/Constants';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport { doChallenge, cancelPollingWithParams } from '../utils/ChallengeViewUtil';\n\nconst request = (opts) => {\n  const ajaxOptions = Object.assign({\n    method: 'GET',\n    contentType: 'application/json',\n  }, opts);\n  return $.ajax(ajaxOptions);\n};\n\nconst Body = BaseFormWithPolling.extend({\n  noButtonBar: true,\n\n  className: 'ion-form device-challenge-poll',\n\n  events: {\n    'click #launch-ov': function(e) {\n      e.preventDefault();\n      this.doCustomURI();\n    }\n  },\n\n  pollingCancelAction: AUTHENTICATOR_CANCEL_ACTION,\n\n  initialize() {\n    BaseFormWithPolling.prototype.initialize.apply(this, arguments);\n    this.listenTo(this.model, 'error', this.onPollingFail);\n    this.doChallenge();\n    this.startPolling();\n  },\n\n  doChallenge() {\n    doChallenge(this);\n  },\n\n  onPollingFail() {\n    this.$('.spinner').hide();\n    this.stopPolling();\n  },\n\n  remove() {\n    BaseFormWithPolling.prototype.remove.apply(this, arguments);\n    this.stopProbing();\n    this.stopPolling();\n  },\n\n  getDeviceChallengePayload() {\n    throw new Error('getDeviceChallengePayload needs to be implemented');\n  },\n\n  doLoopback(deviceChallenge) {\n    let authenticatorDomainUrl = deviceChallenge.domain !== undefined ? deviceChallenge.domain : '';\n    let ports = deviceChallenge.ports !== undefined ? deviceChallenge.ports : [];\n    let challengeRequest = deviceChallenge.challengeRequest !== undefined ? deviceChallenge.challengeRequest : '';\n    let probeTimeoutMillis = deviceChallenge.probeTimeoutMillis !== undefined ?\n      deviceChallenge.probeTimeoutMillis : 100;\n    let currentPort;\n    let foundPort = false;\n    let ovFailed = false;\n    let countFailedPorts = 0;\n\n    const getAuthenticatorUrl = (path) => {\n      return `${authenticatorDomainUrl}:${currentPort}/${path}`;\n    };\n\n    const checkPort = () => {\n      return request({\n        url: getAuthenticatorUrl('probe'),\n        /*\n        OKTA-278573 in loopback server, SSL handshake sometimes takes more than 100ms and thus needs additional\n        timeout however, increasing timeout is a temporary solution since user will need to wait much longer in\n        worst case.\n        TODO: Android timeout is temporarily set to 3000ms and needs optimization post-Beta.\n        OKTA-365427 introduces probeTimeoutMillis; but we should also consider probeTimeoutMillisHTTPS for\n        customizing timeouts in the more costly Android and other (keyless) HTTPS scenarios.\n        */\n        timeout: BrowserFeatures.isAndroid() ? 3000 : probeTimeoutMillis\n      });\n    };\n\n    const onPortFound = () => {\n      return request({\n        url: getAuthenticatorUrl('challenge'),\n        method: 'POST',\n        data: JSON.stringify({ challengeRequest }),\n        timeout: CHALLENGE_TIMEOUT // authenticator should respond within 5 min (300000ms) for challenge request\n      });\n    };\n\n    const onFailure = () => {\n      Logger.error(`Something unexpected happened while we were checking port ${currentPort}.`);\n    };\n\n    const doProbing = () => {\n      return checkPort()\n        .done(() => {\n          return onPortFound()\n            .done(() => {\n              foundPort = true;\n              if (deviceChallenge.enhancedPollingEnabled !== false) {\n                // this way we can gurantee that\n                // 1. the polling is triggered right away (1ms interval)\n                // 2. Only one polling queue\n                // 3. follwoing polling will continue with refresh interval from previous polling response\n                // NOTE: technically, there could still be concurrency issue where when we called stopPolling,\n                // there is already a polling triggered and hasn't completed yet\n                // but the possibility would be much smaller than previous concurrency issue\n                // this is a best effort change\n                this.stopPolling();\n                this.startPolling(1);\n                return;\n              }\n              // once the OV challenge succeeds,\n              // triggers another polling right away without waiting for the next ongoing polling to be triggered\n              // to make the authentication flow goes faster \n              return this.trigger('save', this.model);\n            })\n            .fail((xhr) => {\n              countFailedPorts++;\n              // Windows and MacOS return status code 503 when \n              // there are multiple profiles on the device and\n              // the wrong OS profile responds to the challenge request\n              if (xhr.status !== 503) {\n                // when challenge responds with other errors,\n                // - stop the remaining probing\n                ovFailed = true;\n                // - cancel polling right away\n                cancelPollingWithParams(\n                  this.options.appState,\n                  this.pollingCancelAction,\n                  AUTHENTICATION_CANCEL_REASONS.OV_ERROR,\n                  xhr.status\n                );\n              } else if (countFailedPorts === ports.length) {\n                // when challenge is responded by the wrong OS profile and\n                // all the ports are exhausted,\n                // cancel the polling like the probing has failed\n                cancelPollingWithParams(\n                  this.options.appState,\n                  this.pollingCancelAction,\n                  AUTHENTICATION_CANCEL_REASONS.LOOPBACK_FAILURE,\n                  null\n                );\n              }\n            });\n        })\n        .fail(onFailure);\n    };\n\n    let probeChain = Promise.resolve();\n    ports.forEach(port => {\n      probeChain = probeChain\n        .then(() => {\n          if (!(foundPort || ovFailed)) {\n            currentPort = port;\n            return doProbing();\n          }\n        })\n        .catch(() => {\n          countFailedPorts++;\n          Logger.error(`Authenticator is not listening on port ${currentPort}.`);\n          if (countFailedPorts === ports.length) {\n            Logger.error('No available ports. Loopback server failed and polling is cancelled.');\n            cancelPollingWithParams(\n              this.options.appState,\n              this.pollingCancelAction,\n              AUTHENTICATION_CANCEL_REASONS.LOOPBACK_FAILURE,\n              null\n            );\n          }\n        });\n    });\n  },\n\n  doCustomURI() {\n    this.ulDom && this.ulDom.remove();\n    const IframeView = createInvisibleIFrame('custom-uri-container', this.customURI);\n    this.ulDom = this.add(IframeView).last();\n  },\n\n  doChromeDTC(deviceChallenge) {\n    this.ulDom && this.ulDom.remove();\n    const IframeView = createInvisibleIFrame('chrome-dtc-container', deviceChallenge.href);\n    this.ulDom = this.add(IframeView).last();\n  },\n\n  stopProbing() {\n    this.checkPortXhr && this.checkPortXhr.abort();\n    this.probingXhr && this.probingXhr.abort();\n  },\n});\n\nfunction createInvisibleIFrame(iFrameId, iFrameSrc) {\n  const iFrameView = View.extend({\n    tagName: 'iframe',\n    id: iFrameId,\n    attributes: {\n      src: iFrameSrc,\n    },\n    initialize() {\n      this.el.style.display = 'none';\n    }\n  });\n  return iFrameView;\n}\n\nexport default Body;\n","/*!\n * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n// TODO: Use AuthJS for device fingerprinting: OKTA-418160\nimport { $ } from '@okta/courage';\n\nfunction getUserAgent() {\n  return navigator.userAgent;\n}\n\nfunction isWindowsPhone(userAgent) {\n  return userAgent.match(/windows phone|iemobile|wpdesktop/i);\n}\n\nexport default {\n  isMessageFromCorrectSource($iframe, event) {\n    return event.source === $iframe[0].contentWindow;\n  },\n\n  // NOTE: This utility is similar to the DeviceFingerprint.js file used for V1 authentication flows.\n  generateDeviceFingerprint(fingerprintData) {\n    return new Promise((resolve, reject) => {\n      const userAgent = getUserAgent();\n      if (!userAgent) {\n        return reject('user agent is not defined');\n      } else if (isWindowsPhone(userAgent)) {\n        return reject('device fingerprint is not supported on Windows phones');\n      }\n\n      let $iframe;\n      let iFrameTimeout;\n      const self = this; // Needed for mocking\n\n      function removeIframe() {\n        $iframe.off();\n        $iframe.remove();\n        window.removeEventListener('message', onMessageReceivedFromOkta, false);\n      }\n\n      function handleError(reason) {\n        removeIframe();\n        reject(reason);\n      }\n\n      function onMessageReceivedFromOkta(event) {\n        if (!self.isMessageFromCorrectSource($iframe, event)) {\n          return;\n        }\n        // deviceFingerprint service is available, clear timeout\n        clearTimeout(iFrameTimeout);\n        if (!event || !event.data || event.origin !== fingerprintData.oktaDomainUrl) {\n          handleError('no data');\n          return;\n        }\n        try {\n          const message = JSON.parse(event.data);\n\n          if (message && message.type === 'FingerprintServiceReady') {\n            sendMessageToOkta({\n              type: 'GetFingerprint',\n            });\n          } else if (message && message.type === 'FingerprintAvailable') {\n            removeIframe();\n            resolve(message.fingerprint);\n          } else {\n            handleError('no data');\n          }\n        } catch (error) {\n          //Ignore any errors since we could get other messages too\n        }\n      }\n\n      function sendMessageToOkta(message) {\n        const win = $iframe[0].contentWindow;\n\n        if (win) {\n          win.postMessage(JSON.stringify(message), fingerprintData.oktaDomainUrl);\n        }\n      }\n\n      // Attach listener\n      window.addEventListener('message', onMessageReceivedFromOkta, false);\n      // Create and Load devicefingerprint page inside the iframe\n      $iframe = $('<iframe>', {\n        css: {\n          display: 'none'\n        },\n        src: fingerprintData.oktaDomainUrl + '/auth/services/devicefingerprint',\n      });\n      fingerprintData.element.append($iframe);\n\n      iFrameTimeout = setTimeout(() => {\n        // If the iFrame does not load or there is a slow connection, throw an error\n        handleError('service not available');\n      }, 2000);\n    });\n  }\n};\n","import { loc, View } from '@okta/courage';\nimport { BaseFooter } from '../internals';\nimport { FORMS as RemediationForms } from '../../ion/RemediationConstants';\nimport { getForgotPasswordLink, getSignUpLink } from '../utils/LinksUtil';\nimport Link from './Link';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default BaseFooter.extend({\n\n  showForgotPasswordLink() { \n    return !this.options.appState.isIdentifierOnlyView();\n  },\n\n  footerInfo() {\n    const signUpLinkData = getSignUpLink(this.options.appState, this.options.settings);\n    let SignUpLinkWithText;\n    //Build sign up link view appended with a text. Link class can only build anchor tags\n    if(signUpLinkData.length) {\n      SignUpLinkWithText = View.extend({\n        className: 'signup-info',\n        template: hbs`\n          <span>{{i18n code=\"registration.signup.label\" bundle=\"login\"}}</span><span class=\"signup-link\"></span>\n          `,\n        initialize() {\n          this.add(Link, '.signup-link', {\n            options: signUpLinkData[0]\n          });\n        }\n      });\n    }\n    return SignUpLinkWithText;\n  },\n\n  links() {\n    const { appState, settings } = this.options;\n\n    let helpLinkHref;\n    if (settings.get('helpLinks.help')) {\n      helpLinkHref = settings.get('helpLinks.help');\n    } else {\n      const baseUrl = settings.get('baseUrl');\n      helpLinkHref = baseUrl + '/help/login';\n    }\n\n    const helpLink = [\n      {\n        'name': 'help',\n        'label': loc('help', 'login'),\n        'href': helpLinkHref,\n      },\n    ];\n\n    let forgotPasswordLink = []; \n    if (this.showForgotPasswordLink()) {\n      forgotPasswordLink = getForgotPasswordLink(appState, settings);\n    }\n\n    const customHelpLinks = [];\n    if (settings.get('helpLinks.custom')) {\n      //add custom helpLinks\n      settings.get('helpLinks.custom').forEach(customHelpLink => {\n        customHelpLink.name = 'custom';\n        customHelpLink.label = customHelpLink.text;\n        customHelpLinks.push(customHelpLink);\n      });\n    }\n\n    const unlockAccountLink = [];\n    if (settings.get('helpLinks.unlock')) {\n      unlockAccountLink.push({\n        'type': 'link',\n        'label': loc('unlockaccount', 'login'),\n        'name' : 'unlock',\n        'href': settings.get('helpLinks.unlock'),\n      });\n    } else if (appState.hasRemediationObject(RemediationForms.UNLOCK_ACCOUNT)) {\n      unlockAccountLink.push({\n        'type': 'link',\n        'label': loc('unlockaccount', 'login'),\n        'name' : 'unlock',\n        'actionPath': RemediationForms.UNLOCK_ACCOUNT,\n      });\n    }\n\n    return forgotPasswordLink\n      .concat(unlockAccountLink)\n      .concat(helpLink)\n      .concat(customHelpLinks);\n  }\n});\n","import { View, createButton } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  className: 'sign-in-with-idp',\n  template: hbs`\n    {{#if isSecondaryIdpDisplay}}\n    <div class=\"separation-line\"><span>{{i18n code=\"socialauth.divider.text\" bundle=\"login\"}}</span></div>\n    {{/if}}\n    <div class=\"okta-idps-container\"></div>\n    {{#if isPrimaryIdpDisplay}}\n    <div class=\"separation-line\"><span>{{i18n code=\"socialauth.divider.text\" bundle=\"login\"}}</span></div>\n    {{/if}}    \n    `,\n  initialize() {\n    this.options.idpButtons.forEach((idpButton) => {\n      this.add(createButton(idpButton), '.okta-idps-container');\n    });\n  },\n\n  getTemplateData() {\n    const jsonData = View.prototype.getTemplateData.apply(this, arguments);\n    const addDivider = this.options.idpButtons.length > 0;\n\n    return Object.assign(jsonData, {\n      isPrimaryIdpDisplay: addDivider && this.options.isPrimaryIdpDisplay,\n      isSecondaryIdpDisplay: addDivider && !this.options.isPrimaryIdpDisplay\n    });\n  }\n});\n","import { View, createButton } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  className: 'custom-buttons',\n  template: hbs`\n    {{#if addSeparateLine}}\n    <div class=\"separation-line\"><span>{{i18n code=\"socialauth.divider.text\" bundle=\"login\"}}</span></div>\n    {{/if}}\n    <div class=\"okta-custom-buttons-container primary-auth-container\"></div>\n    `,\n\n  initialize(options) {\n    options.customButtons.forEach((idpButton) => {\n      this.add(createButton(idpButton), '.okta-custom-buttons-container');\n    });\n  },\n\n  getTemplateData() {\n    const jsonData = View.prototype.getTemplateData.apply(this, arguments);\n\n    return Object.assign(jsonData, {\n      addSeparateLine: this.options.addSeparateLine,\n    });\n  }\n});\n","import { View, createButton, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Util from '../../../../util/Util';\nimport Enums from '../../../../util/Enums';\nimport { UNIVERSAL_LINK_POST_DELAY } from '../../utils/Constants';\nimport { FORMS } from '../../../ion/RemediationConstants';\nimport { appendLoginHint } from '../../utils/ChallengeViewUtil';\n\nexport default View.extend({\n  className: 'sign-in-with-device-option',\n  template: hbs`\n    <div class=\"okta-verify-container\">\n    {{#if signInWithDeviceIsRequired}}\n      <div class=\"signin-with-ov-description\">\n      </div>\n    {{/if}}\n    </div>\n    {{#unless signInWithDeviceIsRequired}}\n    <div class=\"separation-line\">\n      <span>{{i18n code=\"authbutton.divider.text\" bundle=\"login\"}}</span>\n    </div>\n    {{/unless}}\n  `,\n  initialize() {\n    const appState = this.options.appState;\n    const deviceChallengePollRemediation = appState.hasRemediationObject(FORMS.LAUNCH_AUTHENTICATOR);\n    \n    const deviceChallenge = deviceChallengePollRemediation?.relatesTo?.value;\n    this.add(createButton({\n      className: 'button',\n      icon: 'okta-verify-authenticator',\n      title: loc('oktaVerify.button', 'login'),\n      click() {\n        if (this.model.get('identifier')) {\n          this.options.settings.set('identifier', encodeURIComponent(this.model.get('identifier')));\n        }\n\n        const isUVapproach = deviceChallenge?.challengeMethod === Enums.UNIVERSAL_LINK_CHALLENGE;\n        if (isUVapproach) {\n          // launch the Okta Verify app\n          let deviceChallengeUrl = appendLoginHint(deviceChallenge.href, this.options?.settings?.get('identifier'));\n          Util.redirect(deviceChallengeUrl);\n        }\n\n        const isAppLinkapproach = deviceChallenge?.challengeMethod === Enums.APP_LINK_CHALLENGE;\n        if (isAppLinkapproach) {\n          // launch the Okta Verify app\n          let deviceChallengeUrl = appendLoginHint(deviceChallenge.href, this.options?.settings?.get('identifier'));\n          Util.redirect(deviceChallengeUrl, window, true);\n        }\n\n        // OKTA-350084\n        // For the universal link (iOS) and app link (Android) approach,\n        // we need to 1. launch the Okta Verify app\n        // and 2. take the enduser to the next step right away\n        // In Safari, when Okta Verify app is not installed, step 1 responds with error immediately,\n        // then step 2 will respond with error.\n        // To avoid showing the error right before switching to the next UI,\n        // wait for 500 milliseconds before invoking step 2\n        Util.callAfterTimeout(() => {\n          if (this.options.isRequired) {\n            appState.trigger('saveForm', this.model);\n          } else {\n            appState.trigger('invokeAction', FORMS.LAUNCH_AUTHENTICATOR, {'rememberMe': this.model.get('rememberMe')});\n          }\n        }, isUVapproach || isAppLinkapproach ? UNIVERSAL_LINK_POST_DELAY : 0);\n      }\n    }), '.okta-verify-container');\n  },\n\n  getTemplateData() {\n    return {\n      signInWithDeviceIsRequired: !!this.options.isRequired,\n    };\n  },\n\n  postRender() {\n    if(this.options.isRequired) {\n      const appLabel = this.options.appState.attributes?.app?.label;\n      const resourceLabel = appLabel ? loc('oktaVerify.appDescription', 'login', [appLabel]) : \n        loc('oktaVerify.description', 'login');\n      const ovDescContainer = this.$el.find('.signin-with-ov-description');\n      ovDescContainer.text(resourceLabel);\n    }\n  }\n});\n","import { View, loc, createButton } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { FORMS } from '../../../ion/RemediationConstants';\n\nexport default View.extend({\n  className: 'sign-in-with-webauthn-option',\n  template: hbs`\n    <div class=\"okta-webauthn-container\">\n    </div>\n    <div class=\"separation-line\">\n      <span>{{i18n code=\"authbutton.divider.text\" bundle=\"login\"}}</span>\n    </div>\n  `,\n  initialize() {\n    this.add(createButton({\n      className: 'button',\n      icon: 'okta-webauthn-authenticator',\n      title: loc('signinWithWebAuthn.button', 'login'),\n      click: () => {\n        this.options.appState.trigger('invokeAction', FORMS.LAUNCH_WEBAUTHN_AUTHENTICATOR);\n      }\n    }), '.okta-webauthn-container');\n  },\n});","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  className: 'custom-access-denied-error-message',\n  template: hbs`\n    {{#if message}}\n      <p>{{message}}</p>\n    {{/if}}\n    {{#if links}}\n      <ul class=\"custom-links\">\n        {{#each links}}\n        <li>\n          <a href={{url}} target=\"_blank\" rel=\"noopener noreferrer\">\n            {{label}}\n          </a>\n        </li>\n        {{/each}}\n      </ul>\n    {{/if}}\n  `,\n  getTemplateData() {\n    return {\n      message: this.options.message,\n      links: this.options.links,\n    };\n  },\n});","import { loc, createCallout } from '@okta/courage';\nimport { FORMS as RemediationForms } from '../../ion/RemediationConstants';\nimport { BaseForm, BaseView, createIdpButtons, createCustomButtons } from '../internals';\nimport DeviceFingerprinting from '../utils/DeviceFingerprinting';\nimport IdentifierFooter from '../components/IdentifierFooter';\nimport Link from '../components/Link';\nimport signInWithIdps from './signin/SignInWithIdps';\nimport customButtonsView from './signin/CustomButtons';\nimport signInWithDeviceOption from './signin/SignInWithDeviceOption';\nimport signInWithWebAuthn from './signin/SignInWithWebAuthn';\nimport { isCustomizedI18nKey } from '../../ion/i18nTransformer';\nimport { getForgotPasswordLink } from '../utils/LinksUtil';\nimport CookieUtil from 'util/CookieUtil';\nimport CustomAccessDeniedErrorMessage from './shared/CustomAccessDeniedErrorMessage';\nimport Util from 'util/Util';\n\nconst CUSTOM_ACCESS_DENIED_KEY = 'security.access_denied_custom_message';\n\n\nconst Body = BaseForm.extend({\n\n  title() {\n    return loc('primaryauth.title', 'login');\n  },\n\n  save() {\n    return loc('oform.next', 'login');\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n\n    const uiSchema = this.getUISchema();\n    if (uiSchema.find(schema => schema.name === 'credentials.passcode')) {\n      this.save = loc('oie.primaryauth.submit', 'login');\n    }\n\n    // Precedence for pre-filling identifier field:\n    // 1. Use username/identifier from the config.\n    // 2. Use identifier value returned in remediation response (model will have this attr set if it's there)\n    // 3. Use value from the \"remember my username\" cookie.\n    if(this._shouldAddUsername(uiSchema)) {\n      // Set username/identifier from the config (i.e. config.username)\n      this.model.set('identifier', this.settings.get('username'));\n    } else if (!this.model.get('identifier') && this._shouldApplyRememberMyUsername(uiSchema)) {\n      // Use value from cookie if the remediation did not return identifier value.\n      this._applyRememberMyUsername();\n    }\n  },\n\n  saveForm() {\n    // Ideally this can be added to a \"preSaveForm\" handler - but keeping this here for now.\n    if (!this.settings.get('features.deviceFingerprinting')) {\n      BaseForm.prototype.saveForm.apply(this, arguments);\n      return;\n    }\n\n    // Before the XHR is made for \"identify\", we'll generate this one-time use fingerprint via\n    // a hidden-iframe (similar to authn/v1 flows)\n    const fingerprintData = {\n      oktaDomainUrl: this.settings.get('baseUrl'),\n      element: this.$el,\n    };\n\n    // For certain flows, we need to generate a device fingerprint\n    // to determine if we need to send a \"New Device Sign-on Notification\".\n    // In the future, this should be handled completely by okta-auth-js OKTA-418160\n    DeviceFingerprinting.generateDeviceFingerprint(fingerprintData)\n      .then(fingerprint => {\n        this.options.appState.set('deviceFingerprint', fingerprint);\n      })\n      .catch(() => { /* Keep going even if device fingerprint fails */ })\n      .finally(() => {\n        BaseForm.prototype.saveForm.apply(this, arguments);\n      });\n  },\n\n  render() {\n    BaseForm.prototype.render.apply(this, arguments);\n\n    // Launch Device Authenticator\n    if (this.options.appState.hasRemediationObject(RemediationForms.LAUNCH_AUTHENTICATOR)) {\n      this.add(signInWithDeviceOption, '.o-form-fieldset-container', false, true, { isRequired: false });\n    }\n\n    if (this.options.appState.hasRemediationObject(RemediationForms.LAUNCH_WEBAUTHN_AUTHENTICATOR)) {\n      this.add(signInWithWebAuthn, '.o-form-fieldset-container', false, true, { isRequired: false });\n    }\n\n    // add forgot password link and external idps buttons if needed\n    const idpButtons = createIdpButtons(this.options);\n    if (Array.isArray(idpButtons) && idpButtons.length) {\n      // Add the forgot password link before the buttons for multiple IDPs\n      this._addForgotPasswordView();\n      this._addIdpView(idpButtons);\n    }\n\n    const customButtons = createCustomButtons(this.options.settings);\n    if (Array.isArray(customButtons) && customButtons.length) {\n      this.add(customButtonsView, {\n        selector: '.o-form-button-bar',\n        options: {\n          customButtons,\n          addSeparateLine: true,\n        }\n      });\n    }\n  },\n\n  postRender() {\n    BaseForm.prototype.postRender.apply(this, arguments);\n    // When a user enters invalid credentials, /introspect returns an error,\n    // along with a user object containing the identifier entered by the user.\n    this.$el.find('.identifier-container').remove();\n  },\n\n  /**\n   * Update UI schemas for customization from .widgetrc.js or Admin Customization settings page.\n   * @returns Array\n   */\n  getUISchema() {\n    const schemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n\n    const { settings } = this.options;\n    const identifierExplainLabeli18nKey = 'primaryauth.username.tooltip';\n    const passwordExplainLabeli18nKey = 'primaryauth.password.tooltip';\n\n    let newSchemas = schemas.map(schema => {\n      let newSchema = { ...schema };\n\n      if (schema.name === 'identifier') {\n        if (isCustomizedI18nKey(identifierExplainLabeli18nKey, settings)) {\n          newSchema = {\n            ...newSchema,\n            explain: loc(identifierExplainLabeli18nKey, 'login'),\n            'explain-top': true,\n          };\n        }\n\n        // We enable the browser's autocomplete for the identifier input\n        // because we want to allow the user to choose from previously used identifiers.\n        newSchema = {\n          ...newSchema,\n          autoComplete: Util.getAutocompleteValue(this.options.settings, 'username')\n        };\n      } else if (schema.name === 'credentials.passcode') {\n        newSchema = {\n          ...newSchema,\n          autoComplete: Util.getAutocompleteValue(this.options.settings, 'current-password')\n        };\n\n        if (isCustomizedI18nKey(passwordExplainLabeli18nKey, settings)) {\n          newSchema = {\n            ...newSchema,\n            explain: loc(passwordExplainLabeli18nKey, 'login'),\n            'explain-top': true,\n          };\n        }\n      }\n\n      return newSchema;\n    });\n\n    // If showKeepMeSignedIn is explicitly set to false, we ensure we don't display\n    // the \"Keep me signed in\" checkbox\n    if (this.settings.get('features.showKeepMeSignedIn') === false) {\n      newSchemas = newSchemas.filter(schema => schema.name !== 'rememberMe');\n    }\n\n    return newSchemas;\n  },\n\n  showCustomFormErrorCallout(error, messages) {\n    if (!error?.responseJSON?.errorSummaryKeys?.includes(CUSTOM_ACCESS_DENIED_KEY)) {\n      return false;\n    }\n\n    const message = messages.find(message => message.i18n.key === CUSTOM_ACCESS_DENIED_KEY);\n    if (!message) {\n      return false;\n    }\n\n    const { errorSummary } = error.responseJSON;\n\n    const options = {\n      type: 'error',\n      content: new CustomAccessDeniedErrorMessage({\n        message: errorSummary,\n        links: message.links,\n      }),\n    };\n\n    this.showMessages(createCallout(options));\n    return true;\n  },\n\n  _addForgotPasswordView() {\n    const forgotPasswordLink = getForgotPasswordLink(this.options.appState, this.options.settings);\n    if (forgotPasswordLink.length) {\n      this.add('<div class=\"links-primary\"></div>', { selector: '.o-form-button-bar' });\n      this.add(Link, {\n        selector: '.links-primary',\n        options: forgotPasswordLink[0],\n      });\n    }\n  },\n\n  _addIdpView(idpButtons) {\n    // We check the 'idpDisplay' option config to determine whether to render the idp buttons\n    // above or below the login fields\n    const idpDisplay = this.options.settings.get('idpDisplay');\n    const isPrimaryIdpDisplay = idpDisplay && idpDisplay.toUpperCase() === 'PRIMARY';\n\n    this.add(signInWithIdps, {\n      prepend: isPrimaryIdpDisplay,\n      selector: isPrimaryIdpDisplay ? '.o-form-fieldset-container' : '.o-form-button-bar',\n      options: {\n        idpButtons,\n        isPrimaryIdpDisplay\n      }\n    });\n  },\n\n  _shouldAddUsername(uiSchema) {\n    // We pre-populate the identifier/username field only if we're in an identifier\n    // form and if the option is passed in.\n    return (uiSchema.find(schema => schema.name === 'identifier') && this.settings.get('username'));\n  },\n\n  _shouldApplyRememberMyUsername(uiSchema) {\n    return (uiSchema.find(schema => schema.name === 'identifier')\n        && this.settings.get('features.rememberMe'));\n  },\n\n  /**\n   * When \"Remember My Username\" is enabled, we pre-fill the identifier\n   * field with the saved userName cookie. The cookie would have been originally\n   * saved when submitting the form previously.\n   */\n  _applyRememberMyUsername() {\n    const cookieUsername = CookieUtil.getCookieUsername();\n    if (cookieUsername) {\n      this.model.set('identifier', cookieUsername);\n    }\n  }\n});\n\nexport default BaseView.extend({\n  Body,\n\n  createModelClass() {\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n\n    // customize pre-submit form validation inline error messages\n    const identifierRequiredi18nKey = 'error.username.required';\n    const passwordRequiredi18nKey = 'error.password.required';\n    const props = ModelClass.prototype.props;\n    const validate = (attr) => {\n      const inlineErrors = {};\n      const isEmptyIdentifier = props['identifier'] && !attr?.['identifier'];\n      const isEmptyPassword = props['credentials.passcode'] && !attr?.['credentials.passcode'];\n      if (isEmptyIdentifier && isCustomizedI18nKey(identifierRequiredi18nKey, this.settings)) {\n        inlineErrors['identifier'] = loc(identifierRequiredi18nKey, 'login');\n      }\n      if (isEmptyPassword && isCustomizedI18nKey(passwordRequiredi18nKey, this.settings)) {\n        inlineErrors['credentials.passcode'] = loc(passwordRequiredi18nKey, 'login');\n      }\n      return inlineErrors;\n    };\n\n    return ModelClass.extend({\n      validate\n    });\n  },\n\n  initialize() {\n    // Override Footer by overriding showForgotPasswordLink method\n    this.Footer = IdentifierFooter.extend({\n      showForgotPasswordLink: () => {\n        // We don't add the forgot password link in the footer if SIW renders multi IDPs,\n        // instead in that case we add it before the IDP buttons in IdentifierView as primary links.\n        const idpButtons = createIdpButtons(this.options);\n        return (!this.options.appState.isIdentifierOnlyView() &&\n          (!Array.isArray(idpButtons) || idpButtons.length === 0));\n      }\n    });\n  },\n\n  postRender() {\n    BaseView.prototype.postRender.apply(this, arguments);\n\n    // If user entered identifier is not found, API sends back a message with a link to sign up\n    // This is the click handler for that link\n    const appState = this.options.appState;\n    this.$el.find('.js-sign-up').click(function() {\n      appState.trigger('invokeAction', RemediationForms.SELECT_ENROLL_PROFILE);\n      return false;\n    });\n  },\n});\n","import IdentifierView from './IdentifierView';\n\nexport default IdentifierView.extend({\n  render() {\n    IdentifierView.prototype.render.apply(this, arguments);\n\n    this.$el.find('.sign-in-with-idp .separation-line').hide();\n    this.$el.find('.button-primary').hide();\n  }\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm, BaseFooter, BaseView } from '../internals';\nimport Util from 'util/Util';\n\nconst Body = BaseForm.extend({\n\n  title() {\n    return loc('password.reset.title.generic', 'login');\n  },\n\n  save() {\n    return loc('oform.next', 'login');\n  },\n\n  getUISchema() {\n    const schemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    let newSchemas = schemas.map(schema => {\n      let newSchema = { ...schema };\n      if (schema.name === 'identifier') {\n        // We enable the browser's autocomplete for the identifier input\n        // because we want to allow the user to choose from previously used identifiers.\n        newSchema = {\n          ...newSchema,\n          autoComplete: Util.getAutocompleteValue(this.options.settings, 'username')\n        };\n      }\n      return newSchema;\n    });\n    return newSchemas;\n  },\n});\n\nexport default BaseView.extend({\n  Body,\n  Footer: BaseFooter,\n});\n","import { BaseFooter } from '../internals';\nimport { getFactorPageCustomLink, getSwitchAuthenticatorLink } from '../utils/LinksUtil';\n\nexport default BaseFooter.extend({\n  links() {\n    return getFactorPageCustomLink(this.options.appState, this.options.settings)\n      .concat(getSwitchAuthenticatorLink(this.options.appState));\n  },\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n\n  template: hbs`\n    <div data-type=\"beacon-container\" class=\"beacon-container\">\n      <div class=\"beacon-blank auth-beacon\">\n        <div class=\"beacon-blank js-blank-beacon-border auth-beacon-border\"></div>\n      </div>\n      {{#if logoUri}}\n      <div class=\"bg-helper auth-beacon auth-beacon-factor custom-app-logo\" data-se=\"factor-beacon\" role=\"img\" \n        aria-label=\"{{i18n code=\"oie.auth.logo.aria.label\" bundle=\"login\"}}\">\n      {{else}}\n      <div class=\"bg-helper auth-beacon auth-beacon-factor {{className}}\" data-se=\"factor-beacon\">\n      {{/if}}\n          <div class=\"okta-sign-in-beacon-border auth-beacon-border\"></div>\n        </div>\n    </div >\n  `,\n\n  postRender: function() {\n    View.prototype.postRender.apply(this, arguments);\n    const data = this.getTemplateData();\n    if (data.logoUri) {\n      this.el.querySelector('.custom-app-logo').style.backgroundImage = `url(${data.logoUri})`;\n    }\n  },\n  getTemplateData: function() {\n    const appState = this.options?.appState;\n    return { className: this.getBeaconClassName() || '',\n      logoUri: appState?.get('currentAuthenticator')?.logoUri || \n        appState?.get('currentAuthenticatorEnrollment')?.logoUri\n    };\n  },\n  getBeaconClassName() {\n    return 'undefined-user';\n  }\n});\n","import { _ } from '@okta/courage';\nimport { BaseHeader, BaseView } from '../internals';\nimport AuthenticatorFooter from './AuthenticatorFooter';\nimport HeaderBeacon from './HeaderBeacon';\nimport { getIconClassNameForBeacon } from '../utils/AuthenticatorUtil';\n\nexport const BaseAuthenticatorBeacon = HeaderBeacon.extend({\n  authenticatorKey() {\n    return this.options.appState.get('authenticatorKey');\n  },\n\n  getBeaconClassName: function() {\n    const authenticatorKey = _.result(this, 'authenticatorKey');\n    return getIconClassNameForBeacon(authenticatorKey);\n  },\n});\n\nexport default BaseView.extend({\n  Header: BaseHeader.extend({\n    HeaderBeacon: BaseAuthenticatorBeacon,\n  }),\n  Footer: AuthenticatorFooter,\n});\n","import { BaseHeader } from '../internals';\nimport { AUTHENTICATOR_KEY } from '../../ion/RemediationConstants';\nimport { BaseAuthenticatorBeacon } from './BaseAuthenticatorView';\n\nexport default BaseHeader.extend({\n  HeaderBeacon: BaseAuthenticatorBeacon.extend({\n    authenticatorKey: AUTHENTICATOR_KEY.EMAIL,\n  })\n});\n","import { loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst generateGeolocationString = (location = {}) => {\n  if (!location.city && !location.country) {\n    return null;\n  }\n  // Use 1 of 2 formats based on presence of 'state' in response:\n  // 1. City, State, Country\n  // 2. City, Country\n  return location.state ?\n    loc('geolocation.formatting.all', 'login', [location.city, location.state, location.country]) :\n    loc('geolocation.formatting.partial', 'login', [location.city, location.country]);\n};\n\n// A map from FactorTransactionIntent in okta-core to customer-facing flow name\nconst challengeIntentToI18nKeyMap = {\n  'AUTHENTICATION': 'idx.return.link.otponly.enter.code.on.sign.in.page',\n  'RECOVERY': 'idx.return.link.otponly.enter.code.on.password.reset.page',\n  'UNLOCK_ACCOUNT': 'idx.return.link.otponly.enter.code.on.account.unlock.page',\n  'ENROLLMENT': 'idx.return.link.otponly.enter.code.on.sign.up.page'\n};\n\nconst getTerminalOtpEmailMagicLinkContext = (settings, appState) => {\n  const app = appState.get('app');\n  const client = appState.get('client');\n  const challengeIntentContentKey = challengeIntentToI18nKeyMap[appState.get('idx').context.intent];\n  const enterCodeOnFlowPage = challengeIntentContentKey\n    ? loc(challengeIntentContentKey, 'login')\n    : loc('idx.enter.otp.in.original.tab', 'login');\n  let appName, browserOnOsString, isMobileDevice, geolocation;\n  if (app) {\n    appName = loc('idx.return.link.otponly.app', 'login', [app.label]);\n  }\n  if (client) {\n    browserOnOsString = loc('idx.return.link.otponly.browser.on.os', 'login', [client.browser, client.os]);\n    isMobileDevice = browserOnOsString.includes('Android') || browserOnOsString.includes('iOS');\n    geolocation = generateGeolocationString(client.location);\n  }\n  const otp = settings.get('otp') || appState.get('currentAuthenticator')?.contextualData?.otp;\n\n  return {\n    showRequestInfo: appName || browserOnOsString || geolocation,\n    appName,\n    browserOnOsString,\n    isMobileDevice,\n    geolocation,\n    otp,\n    enterCodeOnFlowPage\n  };\n};\n\nconst BaseEmailMagicLinkOTPTerminalView = View.extend({\n  getTemplateData() {\n    return getTerminalOtpEmailMagicLinkContext(this.options.settings, this.options.appState);\n  },\n});\n\nconst OTPInformationTerminalView = BaseEmailMagicLinkOTPTerminalView.extend({\n  template: hbs`\n  <p class=\"enter-code-on-page\">{{enterCodeOnFlowPage}}</p>\n  <h1 class='otp-value no-translate'>{{otp}}</h1>\n  {{#if showRequestInfo}}\n  <div class=\"enduser-email-otp-only--info\">\n    <div class=\"okta-form-label\">{{i18n code=\"idx.return.link.otponly.request\" bundle=\"login\"}}</div>\n  </div>\n  {{/if}}\n  {{#if browserOnOsString}}\n  <div class=\"enduser-email-otp-only--info\">\n    {{#if isMobileDevice}}\n      <i class=\"enduser-email-otp-only--icon icon--smartphone\" aria-hidden=\"true\"></i>\n    {{else}}\n      <i class=\"enduser-email-otp-only--icon icon--desktop\" aria-hidden=\"true\"></i>\n    {{/if}}\n    <div data-se=\"otp-browser-os\">{{browserOnOsString}}</div>\n  </div>\n  {{/if}}\n  {{#if appName}}\n  <div class=\"enduser-email-otp-only--info\">\n    <i class=\"enduser-email-otp-only--icon icon--app\" aria-hidden=\"true\"></i>\n    <div data-se=\"otp-app\">{{appName}}</div>\n  </div>\n  {{/if}}\n  {{#if geolocation}}\n  <div class=\"enduser-email-otp-only--info\">\n    <i class=\"enduser-email-otp-only--icon icon--location\" aria-hidden=\"true\"></i>\n    <div data-se=\"otp-geolocation\">{{geolocation}}</div>\n  </div>\n  {{/if}}\n  <br>\n  <p class='otp-warning'>{{i18n code=\"idx.return.link.otponly.warning.text\" bundle=\"login\"}}</p>\n  `,\n});\n\nexport {\n  OTPInformationTerminalView\n};\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { getMessage } from '../../../ion/i18nTransformer';\n\nconst I18N_KEY_PREFIX = 'idx.error.code.access_denied.device_assurance.remediation';\nconst HELP_AND_CONTACT_KEY_PREFIX = `${I18N_KEY_PREFIX}.additional_help_`;\nconst CUSTOM_URL_ADDITIONAL_HELP_KEY = `${I18N_KEY_PREFIX}.additional_help_custom`;\nconst REMEDIATION_OPTION_INDEX_KEY = `${I18N_KEY_PREFIX}.option_index`;\nconst TITLE_KEY = `${I18N_KEY_PREFIX}.title`;\nconst EXPLANATION_KEY_PREFIX = `${I18N_KEY_PREFIX}.explanation_`;\n\nfunction buildRemediationOptionBlockMessage(message) {\n  let link = null;\n  if (message.links && message.links[0] && message.links[0].url) {\n    link = message.links[0].url;\n  }\n  return {\n    message: getMessage(message),\n    link,\n    className: (\n      message.i18n.key === REMEDIATION_OPTION_INDEX_KEY ?\n        'end-user-remediation-option' :\n        'end-user-remediation-action'\n    ),\n  };\n}\n\nexport default View.extend({\n  className: 'end-user-remediation-terminal-view',\n  template: hbs`\n    {{#if title}}\n      <div class=\"end-user-remediation-title\">{{title}}</div>\n    {{/if}}\n    {{#if explanation}}\n      <div class=\"end-user-remediation-explanation\">{{explanation}}</div>\n    {{/if}}\n    {{#if remediationOptions}}\n      <div class=\"end-user-remediation-options\">\n      {{#each remediationOptions}}\n        <div class=\"{{className}}\">\n        {{#if link}}\n          <a href=\"{{link}}\" target=\"_blank\" rel=\"noopener noreferrer\">{{message}}</a>\n        {{else}}\n          {{message}}\n        {{/if}}\n        </div>\n      {{/each}}\n      </div>\n    {{/if}}\n    <div class=\"end-user-remediation-help-and-contact\">\n    {{#if useCustomHelpText }}\n      {{i18n\n        code=\"idx.error.code.access_denied.device_assurance.remediation.additional_help_custom\"\n        bundle=\"login\"\n        $1=\"<a href='#' target='_blank' rel='noopener noreferrer' class='additional-help'>$1</a>\"\n      }}\n    {{else}}\n      {{i18n\n        code=\"idx.error.code.access_denied.device_assurance.remediation.additional_help_default\"\n        bundle=\"login\"\n        $1=\"<a href='#' target='_blank' rel='noopener noreferrer' class='additional-help'>$1</a>\"\n      }}\n    {{/if}}\n    </div>\n  `,\n  getTemplateData() {\n    const messages = this.options.messages.value;\n    const remediationOptions = [];\n    let title = null;\n    let explanation = null;\n    let useCustomHelpText = false;\n\n    messages.forEach((message) => {\n      if (message.i18n.key === TITLE_KEY) {\n        title = getMessage(message);\n      } else if (message.i18n.key.startsWith(EXPLANATION_KEY_PREFIX)) {\n        explanation = getMessage(message);\n      } else if (message.i18n.key.startsWith(HELP_AND_CONTACT_KEY_PREFIX)) {\n        useCustomHelpText = message.i18n.key === CUSTOM_URL_ADDITIONAL_HELP_KEY;\n        if (message.links && message.links[0] && message.links[0].url) {\n          this.additionalHelpUrl = message.links[0].url;\n        }\n      } else {\n        remediationOptions.push(buildRemediationOptionBlockMessage(message));\n      }\n    });\n\n    return {\n      title,\n      explanation,\n      remediationOptions,\n      useCustomHelpText,\n    };\n  },\n  render() {\n    View.prototype.render.apply(this, arguments);\n    if (this.additionalHelpUrl) {\n      this.$el.find('.additional-help').attr('href', this.additionalHelpUrl);\n    }\n  },\n});","import { loc, createCallout } from '@okta/courage';\nimport { BaseForm, BaseFooter, BaseView } from '../internals';\nimport { getBackToSignInLink, getSkipSetupLink, getReloadPageButtonLink } from '../utils/LinksUtil';\nimport EmailAuthenticatorHeader from '../components/EmailAuthenticatorHeader';\nimport { OTPInformationTerminalView } from './consent/EmailMagicLinkOTPTerminalView';\nimport CustomAccessDeniedErrorMessage from './shared/CustomAccessDeniedErrorMessage';\nimport EndUserRemediationTerminalMessage from './end-user-remediation/EndUserRemediationTerminalMessage';\n\nconst RETURN_LINK_EXPIRED_KEY = 'idx.return.link.expired';\nconst IDX_RETURN_LINK_OTP_ONLY = 'idx.enter.otp.in.original.tab';\nconst SAFE_MODE_KEY_PREFIX = 'idx.error.server.safe.mode';\nconst UNLOCK_ACCOUNT_TERMINAL_KEY = 'oie.selfservice.unlock_user.success.message';\nconst UNLOCK_ACCOUNT_FAILED_PERMISSIONS = 'oie.selfservice.unlock_user.challenge.failed.permissions';\nconst RESET_PASSWORD_NOT_ALLOWED = 'oie.selfservice.reset.password.not.allowed';\nconst RETURN_TO_ORIGINAL_TAB_KEY = 'idx.return.to.original.tab';\nconst OPERATION_CANCELED_ON_OTHER_DEVICE_KEY = 'idx.operation.cancelled.on.other.device';\nconst OPERATION_CANCELED_BY_USER_KEY = 'idx.operation.cancelled.by.user';\nconst DEVICE_ACTIVATED = 'idx.device.activated';\nconst DEVICE_NOT_ACTIVATED_CONSENT_DENIED = 'idx.device.not.activated.consent.denied';\nconst DEVICE_NOT_ACTIVATED_INTERNAL_ERROR = 'idx.device.not.activated.internal.error';\nconst FLOW_CONTINUE_IN_NEW_TAB = 'idx.transferred.to.new.tab';\nconst EMAIL_LINK_OUT_OF_DATE = 'idx.return.stale';\nconst EMAIL_LINK_CANT_BE_PROCESSED = 'idx.return.error';\nconst EMAIL_VERIFICATION_REQUIRED = 'idx.email.verification.required';\nconst END_USER_REMEDIATION_KEY_PREFIX = 'idx.error.code.access_denied.device_assurance.remediation.';\n\nconst EMAIL_ACTIVATION_EMAIL_EXPIRE = 'idx.expired.activation.token';\nconst EMAIL_ACTIVATION_EMAIL_INVALID = 'idx.missing.activation.token';\nconst EMAIL_ACTIVATION_EMAIL_SUBMITTED = 'idx.request.activation.email';\nconst EMAIL_ACTIVATION_EMAIL_SUSPENDED = 'idx.activating.inactive.user';\n\nconst CUSTOM_ACCESS_DENIED_KEY = 'security.access_denied_custom_message';\n\nexport const REGISTRATION_NOT_ENABLED = 'oie.registration.is.not.enabled';\nexport const FORGOT_PASSWORD_NOT_ENABLED = 'oie.forgot.password.is.not.enabled';\n\nconst EMAIL_AUTHENTICATOR_TERMINAL_KEYS = [\n  FLOW_CONTINUE_IN_NEW_TAB,\n  EMAIL_LINK_OUT_OF_DATE,\n  EMAIL_LINK_CANT_BE_PROCESSED,\n  EMAIL_VERIFICATION_REQUIRED,\n  RETURN_TO_ORIGINAL_TAB_KEY,\n  RETURN_LINK_EXPIRED_KEY,\n  OPERATION_CANCELED_ON_OTHER_DEVICE_KEY,\n  OPERATION_CANCELED_BY_USER_KEY,\n  IDX_RETURN_LINK_OTP_ONLY,\n];\n\nconst DEVICE_CODE_ERROR_KEYS = [\n  DEVICE_NOT_ACTIVATED_CONSENT_DENIED,\n  DEVICE_NOT_ACTIVATED_INTERNAL_ERROR\n];\n\nconst DEVICE_CODE_FLOW_TERMINAL_KEYS = [\n  DEVICE_ACTIVATED,\n  ...DEVICE_CODE_ERROR_KEYS\n];\n\n// These terminal views build their own links, basically they have cancel remediation in error response\n// Or doesn't require a Back to Sign in link because the flow didn't start from login screen\nconst NO_BACKTOSIGNIN_LINK_VIEWS = [\n  UNLOCK_ACCOUNT_TERMINAL_KEY,\n  RETURN_TO_ORIGINAL_TAB_KEY,\n  FLOW_CONTINUE_IN_NEW_TAB,\n  OPERATION_CANCELED_ON_OTHER_DEVICE_KEY,\n  ...DEVICE_CODE_FLOW_TERMINAL_KEYS,\n  UNLOCK_ACCOUNT_FAILED_PERMISSIONS,\n  RESET_PASSWORD_NOT_ALLOWED,\n  IDX_RETURN_LINK_OTP_ONLY,\n];\n\n// Key map to transform terminal view titles {ApiKey : WidgetKey}  \nconst terminalViewTitles = {\n  [RETURN_LINK_EXPIRED_KEY] : 'oie.email.return.link.expired.title',\n  [UNLOCK_ACCOUNT_TERMINAL_KEY] : 'account.unlock.unlocked.title',\n  [DEVICE_ACTIVATED] : 'device.code.activated.success.title',\n  [REGISTRATION_NOT_ENABLED] : 'oie.registration.form.title',\n  [FORGOT_PASSWORD_NOT_ENABLED] : 'password.reset.title.generic',\n  [EMAIL_ACTIVATION_EMAIL_EXPIRE] : 'oie.activation.request.email.title.expire',\n  [EMAIL_ACTIVATION_EMAIL_SUBMITTED] : 'oie.activation.request.email.title.submitted',\n  [EMAIL_ACTIVATION_EMAIL_SUSPENDED] : 'oie.activation.request.email.title.suspended',\n  [EMAIL_ACTIVATION_EMAIL_INVALID] : 'oie.activation.request.email.title.invalid',\n  [DEVICE_NOT_ACTIVATED_CONSENT_DENIED] : 'device.code.activated.error.title',\n  [DEVICE_NOT_ACTIVATED_INTERNAL_ERROR] : 'device.code.activated.error.title',\n  [RETURN_TO_ORIGINAL_TAB_KEY] : 'oie.consent.enduser.email.allow.title',\n  [IDX_RETURN_LINK_OTP_ONLY]: 'idx.return.link.otponly.your.verification.code',\n};\n\nconst Body = BaseForm.extend({\n  noButtonBar: true,\n\n  postRender() {\n    BaseForm.prototype.postRender.apply(this, arguments);\n    this.$el.addClass('terminal-state');\n\n    // show device code terminal icons\n    if (this.options.appState.containsMessageWithI18nKey(DEVICE_CODE_FLOW_TERMINAL_KEYS)) {\n      const iconClass = this.options.appState.containsMessageWithI18nKey(DEVICE_ACTIVATED)\n        ? 'success-24-green' : 'error-24-red';\n      this.$('.o-form-head').before('<div class=\"device-code-terminal--icon-container\">' +\n        '<span class=\"device-code-terminal--icon ' + iconClass + '\"></span>' +\n        '</div>');\n    }\n  },\n\n  title() {\n    return this.getTerminalViewTitle();\n  },\n\n  getTerminalViewTitle() {\n    if (this.options.appState.containsMessageStartingWithI18nKey(SAFE_MODE_KEY_PREFIX)) {\n      return loc('oie.safe.mode.title', 'login');\n    }\n\n    const apiKeys = Object.keys(terminalViewTitles);\n    const key = apiKeys.find(key => this.options.appState.containsMessageWithI18nKey(key));\n    if (key) {\n      return loc(terminalViewTitles[key], 'login');\n    }\n  },\n\n  prepareMessageForCustomView(messagesObjs) {\n    let hasCustomView = false;\n    if (this.options.appState.containsMessageWithI18nKey(IDX_RETURN_LINK_OTP_ONLY)) {\n      this.add(OTPInformationTerminalView);\n      hasCustomView = true;\n    } else if (this.options.appState.containsMessageStartingWithI18nKey(CUSTOM_ACCESS_DENIED_KEY)) {\n      this.add(createCallout({\n        type: 'error',\n        content: new CustomAccessDeniedErrorMessage(\n          { message: messagesObjs.value[0].message, links: messagesObjs.value[0].links })\n      }));\n      hasCustomView = true;\n    } else if (this.options.appState.containsMessageStartingWithI18nKey(END_USER_REMEDIATION_KEY_PREFIX)) {\n      this.add(createCallout({\n        type: 'error',\n        content: new EndUserRemediationTerminalMessage({messages: messagesObjs}),\n      }));\n      hasCustomView = true;\n    }\n\n    return hasCustomView;\n  },\n\n  showMessages() {\n    const messagesObjs = this.options.appState.get('messages');\n    let hasCustomView = false;\n    let description;\n    if (this.options.appState.containsMessageWithI18nKey(OPERATION_CANCELED_ON_OTHER_DEVICE_KEY)) {\n      description = loc('idx.operation.cancelled.on.other.device', 'login');\n      messagesObjs.value.push({ message: loc('oie.consent.enduser.deny.description', 'login') });\n    } else if (this.options.appState.containsMessageWithI18nKey(RETURN_TO_ORIGINAL_TAB_KEY)) {\n      description = loc('oie.consent.enduser.email.allow.description', 'login');\n      messagesObjs.value.push({ message: loc('oie.return.to.original.tab', 'login')});\n    } else if (this.options.appState.containsMessageWithI18nKey('tooManyRequests')) {\n      description = loc('oie.tooManyRequests', 'login');\n    } else if (this.options.appState.containsMessageWithI18nKey(RETURN_LINK_EXPIRED_KEY)) {\n      messagesObjs.value[0].class = 'ERROR';\n    } else {\n      hasCustomView = this.prepareMessageForCustomView(messagesObjs);\n    }\n\n    if (description && Array.isArray(messagesObjs?.value)) {\n      messagesObjs.value[0].message = description;\n    }\n\n    this.options.appState.set('messages', messagesObjs);\n    if (!hasCustomView) {\n      BaseForm.prototype.showMessages.call(this);\n    }\n  },\n\n});\n\nconst Footer = BaseFooter.extend({\n  // All terminal views should have Back to sign in link either widget configured or server configured.\n  links: function() {\n    if (this.options.appState.containsMessageStartingWithI18nKey(SAFE_MODE_KEY_PREFIX)) {\n      return getSkipSetupLink(this.options.appState);\n    }\n    if (this.options.appState.containsMessageWithI18nKey(DEVICE_CODE_ERROR_KEYS)) {\n      return getReloadPageButtonLink();\n    }\n    // If cancel object exists idx response then view would take care of rendering back to sign in link\n    if (!this.options.appState.hasActionObject('cancel') &&\n        !this.options.appState.containsMessageWithI18nKey(NO_BACKTOSIGNIN_LINK_VIEWS)) {\n      // TODO OKTA-432869 \"back to sign in\" links to org baseUrl, does not work correctly with embedded widget\n      return getBackToSignInLink(this.options);\n    }\n  }\n});\n\nexport default BaseView.extend({\n  initialize() {\n    BaseView.prototype.initialize.apply(this, arguments);\n    if (this.options.appState.containsMessageWithI18nKey(EMAIL_AUTHENTICATOR_TERMINAL_KEYS)) {\n      this.Header = EmailAuthenticatorHeader;\n    }\n  },\n  Body,\n  Footer\n});\n","import { _, loc, createCallout, createButton } from '@okta/courage';\nimport { BaseForm, BaseView } from '../internals';\nimport { INTERSTITIAL_REDIRECT_VIEW } from '../../ion/RemediationConstants';\nimport CustomAccessDeniedErrorMessage from '../views/shared/CustomAccessDeniedErrorMessage';\nimport Util from 'util/Util';\nimport { getHeader } from '../utils/AutoRedirectUtil';\nconst CUSTOM_ACCESS_DENIED_KEY = 'security.access_denied_custom_message';\nconst UNLOCK_USER_SUCCESS_MESSAGE = 'oie.selfservice.unlock_user.landing.to.app.success.message';\n\nconst Body = BaseForm.extend({\n  /* eslint complexity: [2, 16] */\n  title() {\n    let titleString = loc('oie.success.text.signingIn', 'login');\n    // For more info on the API response available in appState, see IdxResponseBuilder.java\n    const app = this.options.appState.get('app');\n    const user = this.options.appState.get('user');\n\n    // If the option is not set, we treat that as being the case where we don't render the spinner.\n    // This is to account for the customer hosted scenario, because by default okta-core will pass in\n    // the correct value as set by the option in the Admin UI (which by default is \"DEFAULT\").\n    if (!this.redirectView || this.redirectView === INTERSTITIAL_REDIRECT_VIEW.NONE) {\n      titleString = loc('oie.success.text.signingIn.with.ellipsis', 'login');\n      return titleString;\n    }\n\n    if (_.isEmpty(app)) {\n      return titleString;\n    }\n\n    const { label: appInstanceName, name: appDisplayName } = app;\n    const { identifier: userEmail } = user || {};\n\n    const appName = appInstanceName ? appInstanceName : appDisplayName;\n\n    // OKTA-635926: add user gesture for ov enrollment on android\n    if (Util.isAndroidOVEnrollment()) {\n      titleString = loc('oie.success.text.signingIn.with.appName.android.ov.enrollment', 'login');\n    } else if (appName && userEmail && !this.settings.get('features.showIdentifier')) {\n      titleString = loc('oie.success.text.signingIn.with.appName.and.identifier', 'login', [appName, userEmail]);\n    } else if (appName) {\n      titleString = loc('oie.success.text.signingIn.with.appName', 'login', [appName]);\n    }\n\n    return titleString;\n  },\n  showMessages() {\n    if (this.isUnlockSuccess()) {\n      const container = '.o-form-error-container';\n      const text = loc('oie.selfservice.unlock_user.landing.to.app.signing.in.message', 'login');\n      this.add(`<div class=\"ion-messages-container\"><p>${text}</p></div>`, container);\n      return;\n    } else if (this.options.appState.containsMessageStartingWithI18nKey(CUSTOM_ACCESS_DENIED_KEY)) {\n      const { message, links } = this.options.appState.get('messages').value.find(\n        msg => msg.i18n.key === CUSTOM_ACCESS_DENIED_KEY);\n      this.add(createCallout({\n        type: 'error',\n        content: new CustomAccessDeniedErrorMessage({ message, links })\n      }));\n      return;\n    }\n    BaseForm.prototype.showMessages.call(this);\n  },\n  isUnlockSuccess() {\n    return this.options.appState.containsMessageWithI18nKey(UNLOCK_USER_SUCCESS_MESSAGE);\n  },\n  noButtonBar: true,\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    this.redirectView = this.settings.get('interstitialBeforeLoginRedirect');\n    this.model.set('useRedirect', true);\n    this.trigger('save', this.model);\n  },\n\n  render() {\n    BaseForm.prototype.render.apply(this, arguments);\n    if (this.redirectView === INTERSTITIAL_REDIRECT_VIEW.DEFAULT) {\n\n      // OKTA-635926: add user gesture for ov enrollment on android\n      if (Util.isAndroidOVEnrollment()) {\n        const currentViewState = this.options.appState.getCurrentViewState();\n        this.add(createButton({\n          className: 'ul-button button button-wide button-primary hide-underline',\n          title: loc('oktaVerify.open.button', 'login'),\n          id: 'launch-enrollment-ov',\n          click: () => {\n            Util.redirectWithFormGet(currentViewState.href);\n          }\n        }));\n      } else {\n        this.add('<div class=\"okta-waiting-spinner\"></div>');\n      }\n    }\n  }\n});\n\nexport default BaseView.extend({\n  Header: getHeader(),\n  Body: Body\n});\n","import Util from '../../../util/Util';\nimport {BaseHeader} from '../internals';\nimport {BaseAuthenticatorBeacon} from '../components/BaseAuthenticatorView';\nimport {AUTHENTICATOR_KEY} from '../../ion/RemediationConstants';\n\nfunction getHeader() {\n  if (Util.isAndroidOVEnrollment()) {\n    return BaseHeader.extend({\n      HeaderBeacon: BaseAuthenticatorBeacon.extend({\n        authenticatorKey: AUTHENTICATOR_KEY.OV,\n      })\n    });\n  } else {\n    return BaseHeader;\n  }\n}\n\nexport { getHeader };\n","import { loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { BaseForm, BaseView } from '../internals';\nimport { MS_PER_SEC } from '../utils/Constants';\n\nconst PollMessageView = View.extend({\n  template: hbs`\n    <div class=\"ion-messages-container\">\n      <p>{{i18n code=\"poll.form.message\"\n        bundle=\"login\" arguments=\"countDownCounterValue\" $1=\"<span class='strong'>$1</span>\"}} </p>\n    </div>\n    <div class=\"hide okta-waiting-spinner\"></div>\n    `\n  ,\n  getTemplateData() {\n    const countDownCounterValue = this.options;\n    return {\n      countDownCounterValue,\n    };\n  },\n});\n\nconst Body = BaseForm.extend(Object.assign(\n  {\n    title() {\n      return  loc('poll.form.title', 'login');\n    },\n\n    noButtonBar: true,\n\n    initialize() {\n      BaseForm.prototype.initialize.apply(this, arguments);\n      const refreshInterval = this.options.appState.getCurrentViewState().refresh;\n      this.refreshTimeout = setTimeout(() => {\n        this.$el.find('.okta-waiting-spinner').show();\n        // start after a small delay so that the spinner does not get hidden too soon\n        setTimeout(() => this.saveForm(this.model), 200);\n      }, refreshInterval);\n    },\n\n    render() {\n      BaseForm.prototype.render.apply(this, arguments);\n      this.countDownCounterValue = Math.ceil(this.options.appState.getCurrentViewState().refresh / MS_PER_SEC);\n      this.add(new PollMessageView(this.countDownCounterValue));\n      this.startCountDown('.ion-messages-container span', MS_PER_SEC);\n    },\n\n    remove() {\n      BaseForm.prototype.remove.apply(this, arguments);\n      clearTimeout(this.refreshTimeout);\n    },\n\n    triggerAfterError() {\n      BaseForm.prototype.triggerAfterError.apply(this, arguments);\n      clearTimeout(this.refreshTimeout);\n      this.stopCountDown();\n      this.$el.find('.o-form-fieldset-container').empty();\n    },\n\n    startCountDown(selector , interval) {\n      if (this.countDown) {\n        clearInterval(this.countDown);\n      }\n      this.counterEl = this.$el.find(selector);\n      this.countDown = setInterval(() => {\n        if(this.counterEl.text() !== '0') {\n          this.counterEl.text(this.counterEl.text() - 1);\n        }\n      }, interval, this);\n    },\n\n    stopCountDown() {\n      if (this.countDown) {\n        clearInterval(this.countDown);\n      }\n    },\n  },\n));\n\nexport default BaseView.extend({\n  Body\n});\n","import { View, _, loc } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst defaultLogo = '/img/logos/default.png';\n\nconst AdminConsentViewHeader = View.extend({\n  className: 'consent-title detail-row',\n  titleText: () => loc('oie.consent.scopes.admin.title', 'login'),\n  hasIssuer: true,\n  template: hbs`\n    {{#if clientURI}}\n    <a href=\"{{clientURI}}\" class=\"client-logo-link\" title=\"{{altText}}\" target=\"_blank\">\n    {{/if}}\n    {{#if customLogo}}\n      <img class=\"client-logo custom-logo\" src=\"{{customLogo}}\" alt=\"{{altText}}\" aria-hidden=\"true\" />\n    {{else}}\n      <img class=\"client-logo default-logo\" src=\"{{defaultLogo}}\" alt=\"{{altText}}\" aria-hidden=\"true\" />\n    {{/if}}\n    {{#if clientURI}}\n      </a>\n    {{/if}}\n    <h1>\n      <span class=\"title-text\">\n        <b class=\"no-translate\">{{appName}}</b>&nbsp;{{titleText}}\n      </span>\n      {{#if issuer}}\n        <div class=\"issuer no-translate\"><span>{{issuer}}</span></div>\n      {{/if}}\n    </h1>`,\n  getTemplateData: function() {\n    const { appState } = this.options;\n    const { label, clientUri, logo } =  appState.get('app');\n    const { issuer: issuerObj } = appState.get('authentication');\n\n    const customLogo = logo?.href;\n    const altText = loc('logo.for.the.app.alt.text', 'login');\n    const appName = _.escape(label);\n    const clientURI = clientUri?.href;\n\n    const issuer = this.hasIssuer ? issuerObj?.uri : null;\n    const titleText = this.titleText();\n\n    return {\n      customLogo,\n      defaultLogo,\n      clientURI,\n      issuer,\n      altText,\n      appName,\n      titleText,\n    };\n  }\n});\n\nexport default AdminConsentViewHeader;\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\n\nexport default BaseForm.extend(\n  {\n    noButtonBar: false,\n    noCancelButton: false,\n    buttonOrder: ['cancel', 'save'],\n    save: () => loc('consent.required.consentButton', 'login'),\n    cancel: () => loc('consent.required.cancelButton', 'login'),\n    title: false,\n    events: {\n      'click input[data-type=\"save\"]': function() {\n        this.setConsent(true);\n      },\n    },\n    setConsent(bool) {\n      this.model.set('consent', bool);\n    },\n    cancelForm() {\n      // override BaseForm.prototype.cancelForm which cancels auth flow\n      this.setConsent(false);\n      this.options.appState.trigger('saveForm', this.model);\n    },\n  },\n);\n","import { BaseView } from '../../internals';\nimport { loc } from '@okta/courage';\nimport AdminConsentViewHeader from './AdminConsentViewHeader';\nimport ConsentViewForm from './ConsentViewForm';\nimport { doesI18NKeyExist } from '../../../ion/i18nTransformer';\n\nexport default BaseView.extend({\n  Header: AdminConsentViewHeader,\n  Body: ConsentViewForm,\n  createModelClass(currentViewState) {\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n    const { uiSchema } = currentViewState;\n    const { scopes } = uiSchema[0];\n\n    const i18nKeyPrefix = 'consent.scopes';\n\n    const localizedScopes = scopes.map(({ name, displayName, description }) => {\n      const scopeKey = `${i18nKeyPrefix}.${name}`;\n      const labelKey = `${scopeKey}.label`;\n      const descKey = `${scopeKey}.desc`;\n      const doesLabelExist = doesI18NKeyExist(labelKey);\n      const doesDescExist = doesI18NKeyExist(descKey);\n      const i18nDisplayName = doesLabelExist ? loc(labelKey, 'login') : displayName;\n      const i18nDescription = doesDescExist ? loc(descKey, 'login'): description;\n\n      return {\n        name,\n        displayName: i18nDisplayName,\n        description: i18nDescription,\n        isCustomized: !doesLabelExist,\n      };\n    });\n\n    return ModelClass.extend({\n      props: {\n        scopes: {type: 'array', value: localizedScopes},\n      },\n      local: {\n        consent: {type: 'boolean', value: false},\n      },\n      toJSON: function() {\n        return {consent: this.get('consent')};\n      }\n    });\n  }\n});\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\n\nconst ConsentViewFooter = View.extend({\n  className: 'consent-footer',\n  template: hbs(\n    '\\\n      {{#if termsOfService}}\\\n        <a class=\"terms-of-service\" href=\"{{termsOfService}}\" target=\"_blank\">\\\n          {{i18n code=\"consent.required.termsOfService\" bundle=\"login\"}}\\\n        </a>\\\n        {{#if privacyPolicy}}\\\n          <span class=\"no-translate\">&#8226</span>\\\n        {{/if}}\\\n      {{/if}}\\\n      {{#if privacyPolicy}}\\\n        <a class=\"privacy-policy\" href=\"{{privacyPolicy}}\" target=\"_blank\">\\\n          {{i18n code=\"consent.required.privacyPolicy\" bundle=\"login\"}}\\\n        </a>\\\n      {{/if}}\\\n    '\n  ),\n  getTemplateData: function() {\n    const appState = this.options.appState;\n    const app = appState.get('app');\n\n    return {\n      termsOfService: app.termsOfService && app.termsOfService.href,\n      privacyPolicy: app.privacyPolicy && app.privacyPolicy.href,\n    };\n  },\n});\n\nexport default ConsentViewFooter;\n","import { loc } from '@okta/courage';\nimport AdminConsentViewHeader from './AdminConsentViewHeader';\n\nexport default AdminConsentViewHeader.extend({\n  titleText: () => loc('oie.consent.scopes.enduser.title', 'login'),\n  hasIssuer: false,\n});\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\n\nexport default View.extend({\n  className: 'consent-description detail-row',\n  template: hbs(\n    '\\\n      <p>{{i18n code=\"consent.required.description\" bundle=\"login\"}}</p>\\\n    '\n  )\n});\n","import AdminConsentView from './AdminConsentView';\nimport EnduserConsentViewFooter from './EnduserConsentViewFooter';\nimport EnduserConsentViewHeader from './EnduserConsentViewHeader';\nimport EnduserConsentAgreementText from './EnduserConsentAgreementText';\n\n\nexport default AdminConsentView.extend({\n  Header: EnduserConsentViewHeader,\n  Footer: EnduserConsentViewFooter,\n  postRender() {\n    const scopeList = this.$el.find('.scope-list');\n    const consentAgreementText = new EnduserConsentAgreementText().render().el;\n    scopeList.after(consentAgreementText);\n  }\n});\n","import { _, internal, loc } from '@okta/courage';\nimport { doesI18NKeyExist } from 'v2/ion/i18nTransformer';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst CheckBox = internal.views.forms.inputs.CheckBox;\n\nexport default CheckBox.extend({\n  template: hbs`\n    <input type=\"checkbox\" name=\"{{name}}\" id=\"{{inputId}}\"/>\n    <label for=\"{{inputId}}\" data-se-for-name=\"{{name}}\"><b>{{placeholder}}</b><p>{{desc}}</p></label>\n  `,\n\n  getLocalizedLabel: function() {\n    const key = `consent.scopes.${this.options.options.scopeName}.label`;\n    return doesI18NKeyExist(key) ? loc(key, 'login') : (this.options.placeholder || this.options.options.scopeName);\n  },\n\n  getLocalizedDesc: function() {\n    const key = `consent.scopes.${this.options.options.scopeName}.desc`;\n    return doesI18NKeyExist(key) ? loc(key, 'login') : this.options.options.desc;\n  },\n\n  isCustomizedScope: function() {\n    return !doesI18NKeyExist(`consent.scopes.${this.options.options.scopeName}.label`);\n  },\n\n  /**\n   * @Override\n   */\n  enable: function() {\n    if (this.options.options.mutable) {\n      this.$(':input').prop('disabled', false);\n    }\n  },\n\n  /**\n   * @Override\n   */\n  editMode: function() {\n\n    this.$el.html(this.template(_.extend(_.omit(this.options, 'placeholder'), {\n      placeholder: this.getLocalizedLabel(),\n      desc: this.getLocalizedDesc()\n    })));\n\n    this.$(':checkbox').prop('checked', this.getModelValue() || false);\n\n    this.$('input').customInput();\n    this.model.trigger('form:resize');\n\n\n    if (!this.options.options.mutable) {\n      const input = this.$('input').get(0);\n      this.$(input.parentElement).addClass('o-form-read-mode');\n      this.$(':checkbox').prop('disabled', true);\n    }\n\n    if (this.options.options.scopeName === 'openid' || this.isCustomizedScope()) {\n      this.$('label > b').addClass('no-translate');\n      if (this.isCustomizedScope()) {\n        this.$('label > p').addClass('no-translate');\n      }\n    }\n\n    return this;\n  },\n\n});","import { BaseView, BaseForm } from '../../internals';\nimport { _, $, View } from '@okta/courage';\nimport ConsentViewForm from './ConsentViewForm';\nimport AdminConsentViewHeader from './AdminConsentViewHeader';\nimport EnduserConsentViewFooter from './EnduserConsentViewFooter';\nimport ScopeCheckBox from '../../components/ScopeCheckBox';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst granularConsentViewHeader = AdminConsentViewHeader.extend({\n  hasIssuer: false,\n  template: hbs`\n    {{#if clientURI}}\n    <a href=\"{{clientURI}}\" class=\"client-logo-link\" title=\"{{altText}}\" target=\"_blank\">\n    {{/if}}\n    {{#if customLogo}}\n      <img class=\"client-logo custom-logo\" src=\"{{customLogo}}\" alt=\"{{altText}}\" aria-hidden />\n    {{else}}\n      <img class=\"client-logo default-logo\" src=\"{{defaultLogo}}\" alt=\"{{altText}}\" aria-hidden />\n    {{/if}}\n    {{#if clientURI}}\n      </a>\n    {{/if}}\n    <h1>\n      <span class=\"title-text\">\n        {{i18n \n            code=\"oie.consent.scopes.granular.title\" bundle=\"login\" \n            arguments=\"appName\"\n            $1=\"<b class='no-translate'>$1</b>\"\n            $2=\"<p>$2</p>\"\n        }}\n      </span>\n    </h1>\n    `,\n});\n\nconst granularConsentViewForm = ConsentViewForm.extend({\n  cancel: BaseForm.prototype.cancel,\n\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    uiSchemas.forEach(schema => {\n      if (schema.type === 'checkbox') {\n        _.assign(schema, {\n          input: ScopeCheckBox,\n          options: {\n            desc: schema.desc,\n            mutable: schema.mutable,\n            // need to extract scope name because it is in a subform (optedScopes.name)\n            scopeName: schema.name.substring(schema.name.indexOf('.') + 1)\n          }\n        });\n      }\n    });\n    return uiSchemas;\n  }\n});\n\nconst GranularConsentAgreementText = View.extend({\n  className: 'consent-description',\n  template: hbs`<p>{{i18n code=\"oie.consent.scopes.granular.description\" bundle=\"login\"}}</p>`\n});\n\n\nexport default BaseView.extend({\n  Header: granularConsentViewHeader,\n  Body: granularConsentViewForm,\n  Footer: EnduserConsentViewFooter,\n\n  postRender() {\n    const scopeList = this.$el.find('.o-form-fieldset-container');\n\n    // Show consent agreement text\n    scopeList.before(new GranularConsentAgreementText().render().el);\n\n    // Re-order scopes so mandatory ones are on bottom\n    this.$(':disabled').each(function() {\n      scopeList.append($(this).closest('.o-form-fieldset'));\n    });\n  }\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport ConsentViewForm from './ConsentViewForm';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport EmailAuthenticatorHeader from '../../components/EmailAuthenticatorHeader';\n\nconst getInfo = hbs`\n  {{#if browser}}\n    <div class=\"enduser-email-consent--info no-translate\">\n      <i class=\"enduser-email-consent--icon icon--desktop\"></i>\n      <div>{{browser}}</div>\n    </div>\n  {{/if}}\n  {{#if app}}\n    <div class=\"enduser-email-consent--info no-translate\">\n      <i class=\"enduser-email-consent--icon icon--app\"></i>\n      <div>{{app}}</div>\n    </div>\n  {{/if}}`;\nconst enduserEmailConsentViewBody = ConsentViewForm.extend({\n  className: 'enduser-email-consent',\n\n  title() {\n    return loc('oie.consent.enduser.title', 'login');\n  },\n  save() {\n    return loc('oie.consent.enduser.accept.label', 'login');\n  },\n  cancel() {\n    return loc('oie.consent.enduser.deny.label', 'login');\n  },\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    const info = getInfo(this.model.pick('browser', 'app'));\n    this.add(info);\n  },\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    return uiSchemas.filter(uiSchema => uiSchema.name !== 'consent' );\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Header: EmailAuthenticatorHeader,\n\n  buttonOrder: ['cancel', 'save'],\n\n  postRender() {\n    const buttonContainer = this.$el.find('.o-form-button-bar');\n    buttonContainer.find('.button-primary').removeClass('button-primary');\n  },\n\n  Body: enduserEmailConsentViewBody,\n\n  createModelClass({ requestInfo }) {\n    const ModelClass = BaseAuthenticatorView.prototype.createModelClass.apply(this, arguments);\n    const browser = requestInfo.find(({ name }) => name === 'browser');\n    const app = requestInfo.find(({ name }) => name === 'appName');\n\n    const local = Object.assign({\n      browser: {\n        type: 'string',\n        value: browser?.value\n      },\n      app: {\n        type: 'string',\n        value: app?.value\n      },\n    }, ModelClass.prototype.local );\n    return ModelClass.extend({\n      local,\n      toJSON() {\n        return {\n          consent: this.get('consent'),\n        };\n      },\n    });\n  }\n});\n","import { BaseHeader } from '../internals';\nimport { AUTHENTICATOR_KEY } from '../../ion/RemediationConstants';\nimport { BaseAuthenticatorBeacon } from './BaseAuthenticatorView';\n\nexport default BaseHeader.extend({\n  HeaderBeacon: BaseAuthenticatorBeacon.extend({\n    authenticatorKey: AUTHENTICATOR_KEY.OV,\n  })\n});\n","import { loc, createCallout } from '@okta/courage';\nimport { BaseFooter, BaseView, BaseOktaVerifyChallengeView } from '../../internals';\nimport Enums from '../../../../util/Enums';\nimport {\n  CANCEL_POLLING_ACTION,\n  IDENTIFIER_FLOW,\n  AUTHENTICATION_CANCEL_REASONS,\n} from '../../utils/Constants';\nimport Link from '../../components/Link';\nimport { doChallenge, cancelPollingWithParams } from '../../utils/ChallengeViewUtil';\nimport OktaVerifyAuthenticatorHeader from '../../components/OktaVerifyAuthenticatorHeader';\nimport { getSignOutLink } from '../../utils/LinksUtil';\nimport CustomAccessDeniedErrorMessage from '../shared/CustomAccessDeniedErrorMessage';\n\nconst CUSTOM_ACCESS_DENIED_KEY = 'security.access_denied_custom_message';\n\nconst Body = BaseOktaVerifyChallengeView.extend({\n  pollingCancelAction: CANCEL_POLLING_ACTION,\n\n  getDeviceChallengePayload() {\n    return this.options.currentViewState.relatesTo.value;\n  },\n\n  doChallenge() {\n    doChallenge(this, IDENTIFIER_FLOW);\n  },\n\n  onPollingFail() {\n    BaseOktaVerifyChallengeView.prototype.onPollingFail.apply(this, arguments);\n    // When SIW receives form error, polling is already stopped\n    // SIW needs to update footer link from /poll/cancel to /idp/idx/cancel\n    const data = { label: loc('loopback.polling.cancel.link.with.form.error', 'login') };\n    this.options.appState.trigger('updateFooterLink', data);\n  },\n\n  showCustomFormErrorCallout(error, messages) {\n    const responseJSON = error.responseJSON;\n    let options = {\n      type: 'error',\n      className: 'okta-verify-uv-callout-content',\n      subtitle: responseJSON.errorSummary,\n    };\n\n    const containsSignedNonceError = responseJSON.errorSummaryKeys &&\n      responseJSON.errorSummaryKeys.some((key) => key.includes('auth.factor.signedNonce.error'));\n    if (containsSignedNonceError) {\n      options.title = loc('user.fail.verifyIdentity', 'login');\n    }\n\n    const containsCustomAccessDeniedError = responseJSON.errorSummaryKeys &&\n      responseJSON.errorSummaryKeys.some((key) => key.includes('security.access_denied_custom_message'));\n    if(containsCustomAccessDeniedError) {\n      const message = messages?.find(message => message.i18n.key === CUSTOM_ACCESS_DENIED_KEY);\n      if (!message) {\n        return false;\n      }\n      options = {\n        type: 'error',\n        content: new CustomAccessDeniedErrorMessage({\n          message: responseJSON.errorSummary,\n          links: message.links,\n        })\n      };\n    }\n\n    this.showMessages(createCallout(options));\n    return true;\n  },\n});\n\nconst Footer = BaseFooter.extend({\n  initialize() {\n    this.listenTo(this.options.appState, 'updateFooterLink', this.handleUpdateFooterLink);\n    if (this.isFallbackApproach() && !this.isFallbackDelayed()) {\n      BaseFooter.prototype.initialize.apply(this, arguments);\n    } else {\n      this.backLink = this.add(Link, {\n        options: {\n          name: 'cancel-authenticator-challenge',\n          label: loc('loopback.polling.cancel.link', 'login'),\n          clickHandler: () => {\n            cancelPollingWithParams(\n              this.options.appState,\n              CANCEL_POLLING_ACTION,\n              AUTHENTICATION_CANCEL_REASONS.USER_CANCELED,\n              null\n            );\n          },\n        }\n      }).last();\n    }\n  },\n\n  handleUpdateFooterLink(data) {\n    // only update link for loopback\n    if (!this.isFallbackApproach() || this.isFallbackDelayed()) {\n      this.backLink && this.backLink.remove();\n      this.backLink = this.add(Link, {\n        options: getSignOutLink(this.options.settings, data)[0]\n      }).last();\n    } \n  },\n\n  isFallbackApproach() {\n    return [\n      Enums.CUSTOM_URI_CHALLENGE,\n      Enums.UNIVERSAL_LINK_CHALLENGE,\n      Enums.APP_LINK_CHALLENGE\n    ].includes(this.options.currentViewState.relatesTo.value.challengeMethod);\n  },\n\n  isFallbackDelayed() {\n    // only delay showing the reopen Okta Verify button for the app link approach for now\n    // until we have more data shows other approaches have the slow cold start problem of the Okta Verify app as well\n    return this.options.currentViewState.relatesTo.value.challengeMethod === Enums.APP_LINK_CHALLENGE;\n  },\n});\n\nexport default BaseView.extend({\n  Header: OktaVerifyAuthenticatorHeader,\n  Body,\n  Footer\n});\n","import { BaseForm, BaseView } from '../../internals';\nimport { loc } from '@okta/courage';\n\n// for BETA,\n// redirect is needed for Apple SSO Extension to intercept the request, because\n// - XHR request is not interceptable\n// - form post is interceptable, but some app (Outlook) closes the app after\n// We may have a different approach/UX for EA\nconst Body = BaseForm.extend({\n  noButtonBar: true,\n\n  className: 'ion-form device-challenge-poll',\n\n  title() {\n    return loc('deviceTrust.sso.redirectText', 'login');\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n\n    this.listenTo(this.model, 'error', () => {\n      this.$('.spinner').hide();\n    });\n    this.add('<div class=\"spinner\"></div>');\n\n    const isGetMethod = this.options.currentViewState?.method?.toLowerCase() === 'get';\n    this.model.set('useRedirect', isGetMethod);\n    this.trigger('save', this.model);\n  }\n});\n\nexport default BaseView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\nimport IdentifierFooter from '../../components/IdentifierFooter';\nimport SignInWithDeviceOption from '../signin/SignInWithDeviceOption';\n\nconst Body = BaseForm.extend({\n\n  title() {\n    return loc('primaryauth.title', 'login');\n  },\n\n  noButtonBar: true,\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    this.add(\n      SignInWithDeviceOption,\n      { selector: '.o-form-fieldset-container',\n        bubble: false,\n        prepend: true,\n        options: { isRequired: true }\n      }\n    );\n  },\n});\n\n// override the footer to add all the supported links except the sign out link\n// no session is granted at this point\nconst Footer = IdentifierFooter.extend({\n  hasBackToSignInLink: false\n});\n\nexport default BaseView.extend({\n  Body,\n  Footer: Footer\n});\n","import { View, loc, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport Enums from 'util/Enums';\n\nconst { Notification } = internal.views.components;\nconst { Clipboard } = internal.util;\n\nconst getDeviceEnrollmentContext = (deviceEnrollment) => {\n  const platform = (deviceEnrollment.platform || '').toLowerCase();\n  const challengeMethod = deviceEnrollment.challengeMethod;\n  const enrollmentType = deviceEnrollment.name;\n  const isIOS = platform === Enums.IOS;\n  const isAndroidAppLink = platform === Enums.ANDROID && challengeMethod === 'APP_LINK';\n  const isAndroidLoopback = platform === Enums.ANDROID && challengeMethod === 'LOOPBACK';\n  return {\n    signInUrl: deviceEnrollment.signInUrl,\n    isIOS,\n    enrollmentType,\n    isAndroidLoopback,\n    isAndroidAppLink,\n    appStoreLink: isIOS ? Enums.OKTA_VERIFY_APPLE_APP_STORE_URL : Enums.OKTA_VERIFY_GOOGLE_PLAY_STORE_URL,\n    orgName: deviceEnrollment.orgName\n  };\n};\n\nconst BaseOdaOktaVerifyTerminalView = View.extend({\n  getTemplateData() {\n    const deviceEnrollment = this.options.appState.get('deviceEnrollment');\n    return getDeviceEnrollmentContext(deviceEnrollment);\n  },\n});\n\nconst IosAndAndroidLoopbackOdaTerminalView =  BaseOdaOktaVerifyTerminalView.extend({\n  template: hbs`\n    <p class=\"explanation\" data-se=\"subheader\">\n      {{i18n code=\"enroll.explanation.p1\" bundle=\"login\"}}\n    </p>\n    <ol>\n      {{#if isIOS}}\n      <li>\n        {{i18n code=\"enroll.mdm.step.copyLink\" bundle=\"login\"}}\n        <a data-clipboard-text=\"{{appStoreLink}}\" class=\"button link-button copy-clipboard-button\">\n          {{i18n code=\"enroll.mdm.copyLink\" bundle=\"login\"}}\n        </a>\n      </li>\n      <li>{{i18n code=\"enroll.mdm.step.pasteLink\" bundle=\"login\"}}</li>\n      <li>{{i18n code=\"enroll.oda.step3\" bundle=\"login\"}}</li>\n      {{/if}}\n      {{#if isAndroidLoopback}}\n      <li>{{i18n code=\"enroll.oda.android.step1\" bundle=\"login\"}}</li>\n      {{/if}}\n      <li>{{i18n code=\"enroll.oda.step1\" bundle=\"login\"}}</li>\n      <li>\n        {{i18n code=\"enroll.oda.step2\" bundle=\"login\"}}\n        <p class=\"org-signin-link\">\n          <span class=\"no-translate\">\n          {{signInUrl}}\n          </span>\n        </p>\n        <a data-clipboard-text=\"{{signInUrl}}\" class=\"button link-button copy-org-clipboard-button\">\n          {{i18n code=\"enroll.oda.org.copyLink\" bundle=\"login\"}}\n        </a>\n      </li>\n      <li>{{i18n code=\"enroll.oda.step6\" bundle=\"login\"}}</li>\n    </ol>\n  `,\n\n  postRender: function() {\n    // Attach each button to the respective 'data-clipboard-text'\n    Clipboard.attach('.copy-clipboard-button').done(() => {\n      let notification = new Notification({\n        message: loc('enroll.mdm.copyLink.success', 'login'),\n        level: 'success',\n      });\n      this.el.prepend(notification.render().el);\n      return false;\n    });\n    Clipboard.attach('.copy-org-clipboard-button').done(() => {\n      let notification = new Notification({\n        message: loc('enroll.oda.org.copyLink.success', 'login'),\n        level: 'success',\n      });\n      this.el.prepend(notification.render().el);\n      return false;\n    });\n  },\n});\n\nconst AndroidAppLinkWithAccountOdaTerminalView =  BaseOdaOktaVerifyTerminalView.extend({\n  template: hbs`\n    <p class=\"explanation\" data-se=\"subheader\">\n    {{i18n code=\"enroll.oda.with.account.explanation\" bundle=\"login\"}}\n    </p>\n    <p class=\"subtitle\">\n    {{i18n code=\"enroll.oda.with.account.subtitile1 \" bundle=\"login\"}}\n    </p>\n    <ul>\n      <li>{{i18n code=\"enroll.oda.with.account.step1\" bundle=\"login\"}}</li>\n      <li>{{i18n code=\"enroll.oda.with.account.step2\" bundle=\"login\"}}</li>\n      <li>{{i18n code=\"enroll.oda.with.account.step3\" bundle=\"login\"}}</li>\n    </ul>\n    <p class=\"subtitle\">\n    {{i18n code=\"enroll.oda.with.account.subtitile2 \" bundle=\"login\"}}\n    </p>\n    <ol>\n      <li>{{i18n code=\"enroll.oda.with.account.step4\" bundle=\"login\"}}</li>\n      <li>{{i18n code=\"enroll.oda.with.account.step5\" bundle=\"login\" arguments=\"signInUrl\"}}</li>\n      <li>{{i18n code=\"enroll.oda.with.account.step6\" bundle=\"login\"}}</li>\n      <li>{{i18n code=\"enroll.oda.with.account.step7\" bundle=\"login\"}}</li>\n    </ol>\n  `,\n});\n\nconst AndroidAppLinkWithoutAccountOdaTerminalView =  BaseOdaOktaVerifyTerminalView.extend({\n  template: hbs`\n    <p class=\"explanation\" data-se=\"subheader\">\n      {{i18n code=\"enroll.oda.without.account.explanation\" bundle=\"login\"}}\n    </p>\n    <ol>\n      <li>\n        {{{i18n code=\"enroll.oda.without.account.step1\" bundle=\"login\" arguments=\"appStoreLink\"}}}\n      </li>\n      <li>{{i18n code=\"enroll.oda.step1\" bundle=\"login\"}}</li>\n      <li>\n        {{i18n code=\"enroll.oda.step2\" bundle=\"login\"}}\n        <p class=\"org-signin-link\">\n          <span class=\"no-translate\">\n          {{signInUrl}}\n          </span>\n        </p>\n        <a data-clipboard-text=\"{{signInUrl}}\" class=\"button link-button copy-org-clipboard-button\">\n          {{i18n code=\"enroll.oda.org.copyLink\" bundle=\"login\"}}\n        </a>\n      </li>\n      <li>{{i18n code=\"enroll.oda.without.account.step4\" bundle=\"login\"}}</li>\n    </ol>\n  `,\n\n  postRender: function() {\n    // Attach each button to the respective 'data-clipboard-text'\n    Clipboard.attach('.copy-org-clipboard-button').done(() => {\n      let notification = new Notification({\n        message: loc('enroll.oda.org.copyLink.success', 'login'),\n        level: 'success',\n      });\n      this.el.prepend(notification.render().el);\n      return false;\n    });\n  },\n});\n\nexport {\n  IosAndAndroidLoopbackOdaTerminalView,\n  AndroidAppLinkWithAccountOdaTerminalView,\n  AndroidAppLinkWithoutAccountOdaTerminalView,\n  getDeviceEnrollmentContext,\n};\n","import { View, loc, internal } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst { Notification } = internal.views.components;\nconst { Clipboard } = internal.util;\n\nexport default View.extend({\n  template: hbs`\n    <div>{{i18n code=\"enroll.explanation.mdm\" bundle=\"login\"}}</div>\n    <ol>\n      <li>\n        {{i18n code=\"enroll.mdm.step.copyLink\" bundle=\"login\"}}\n        <a data-clipboard-text=\"{{enrollmentLink}}\" class=\"button link-button copy-clipboard-button\">\n          {{i18n code=\"enroll.mdm.copyLink\" bundle=\"login\"}}\n        </a>\n      </li>\n      <li>{{i18n code=\"enroll.mdm.step.pasteLink\" bundle=\"login\"}}</li>\n      <li>{{i18n code=\"enroll.mdm.step.followInstructions\" bundle=\"login\" \n      arguments=\"vendor\" $1=\"<span class='semi-strong'>$1</span>\"}}</li>\n      <li>{{i18n code=\"enroll.mdm.step.relogin\" bundle=\"login\"}}</li>\n    </ol>\n  `,\n\n  getTemplateData() {\n    return this.options.appState.get('deviceEnrollment');\n  },\n\n  postRender: function() {\n    // Attach each button to the respective 'data-clipboard-text'\n    Clipboard.attach('.copy-clipboard-button').done(() => {\n      let notification = new Notification({\n        message: loc('enroll.mdm.copyLink.success', 'login'),\n        level: 'success',\n      });\n      this.el.prepend(notification.render().el);\n      return false;\n    });\n  },\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\nimport { IosAndAndroidLoopbackOdaTerminalView,\n  AndroidAppLinkWithAccountOdaTerminalView,\n  AndroidAppLinkWithoutAccountOdaTerminalView,\n  getDeviceEnrollmentContext} from '../../components/OdaOktaVerifyTerminalView';\nimport MdmOktaVerifyTerminalView from '../../components/MdmOktaVerifyTerminalView';\nimport Enums from 'util/Enums';\nimport OktaVerifyAuthenticatorHeader from '../../components/OktaVerifyAuthenticatorHeader';\nimport Link from '../../components/Link';\n\nconst BaseDeviceEnrollTerminalForm = BaseForm.extend({\n  noButtonBar: true,\n  className: 'device-enrollment-terminal',\n});\n\nconst AndroidAppLinkPreselectForm = BaseForm.extend({\n  attributes: { 'data-se': 'android-app-link-setup-options-terminal' },\n  title() {\n    return loc('enroll.title.oda.with.account', 'login');\n  },\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    const deviceEnrollmentContext = getDeviceEnrollmentContext(this.options.appState.get('deviceEnrollment'));\n    this.model.set('hasOVAccount', 'no');\n    this.addInput({\n      label: () => loc('enroll.subtitle.fastpass', 'login', [ deviceEnrollmentContext.orgName ]),\n      'label-top': true,\n      options: {\n        'no': loc('enroll.option.noaccount.fastpass', 'login'),\n        'yes': loc('enroll.option.account.fastpass', 'login'),\n      },\n      name: 'hasOVAccount',\n      type: 'radio',\n    });\n  },\n\n  saveForm() {\n    //remove any existing warnings or messages before saving form\n    this.$el.find('.o-form-error-container').empty();\n    this.options.appState.trigger('updateDeviceEnrollmentView', this.model.get('hasOVAccount') === 'yes');\n  }\n});\n\nconst AndroidAppLinkWithAccountOdaTerminalForm = BaseDeviceEnrollTerminalForm.extend({\n  attributes: { 'data-se': 'android-oda-app-link-with-ov-account-terminal' },\n  title() {\n    return loc('enroll.title.oda.with.account', 'login');\n  },\n  initialize() {\n    BaseDeviceEnrollTerminalForm.prototype.initialize.apply(this, arguments);\n    this.add(AndroidAppLinkWithAccountOdaTerminalView);\n  },\n});\n\nconst AndroidAppLinkWithoutAccountOdaTerminalForm = BaseDeviceEnrollTerminalForm.extend({\n  attributes: { 'data-se': 'android-oda-app-link-without-ov-account-terminal' },\n  title() {\n    return loc('enroll.title.oda.without.account', 'login');\n  },\n  initialize() {\n    BaseDeviceEnrollTerminalForm.prototype.initialize.apply(this, arguments);\n    this.add(AndroidAppLinkWithoutAccountOdaTerminalView);\n  },\n});\n\nconst IosAndAndroidLoopbackOdaTerminalForm = BaseDeviceEnrollTerminalForm.extend({\n  attributes: { 'data-se': 'loopback-terminal' },\n  title() {\n    return loc('enroll.title.oda', 'login');\n  },\n  initialize() {\n    BaseDeviceEnrollTerminalForm.prototype.initialize.apply(this, arguments);\n    this.add(IosAndAndroidLoopbackOdaTerminalView);\n  },\n});\n\nconst MdmTerminalForm = BaseDeviceEnrollTerminalForm.extend({\n  attributes: { 'data-se': 'mdm-terminal' },\n  title() {\n    return loc('enroll.title.mdm', 'login');\n  },\n  initialize() {\n    BaseDeviceEnrollTerminalForm.prototype.initialize.apply(this, arguments);\n    this.add(MdmOktaVerifyTerminalView);\n  },\n});\n\nconst AndroidAppLinkTerminalViewFooter = Link.extend({\n  postRender() {\n    this.$el.click((event) => {\n      event.preventDefault();\n      this.options.appState.trigger('switchBackToPreselect');\n    });\n  }\n});\n\nexport default BaseView.extend({\n  initialize() {\n    BaseView.prototype.initialize.apply(this, arguments);\n    this.listenTo(this.options.appState, 'updateDeviceEnrollmentView', this.handleUpdateDeviceEnrollmentView);\n    this.listenTo(this.options.appState, 'switchBackToPreselect', this.handleSwitchBackToPreselect);\n\n    const deviceEnrollmentContext = getDeviceEnrollmentContext(this.options.appState.get('deviceEnrollment'));\n    this.enrollmentType = (deviceEnrollmentContext.enrollmentType|| '').toLowerCase(); // oda/mdm\n\n    switch (this.enrollmentType) {\n    case Enums.ODA:\n      this.Header = OktaVerifyAuthenticatorHeader;\n      this.Body = deviceEnrollmentContext.isAndroidAppLink ?\n        AndroidAppLinkPreselectForm : IosAndAndroidLoopbackOdaTerminalForm;\n      break;\n    case Enums.MDM:\n      this.Body = MdmTerminalForm;\n      break;\n    }\n  },\n\n  handleUpdateDeviceEnrollmentView(withAccount) {\n    this.Body = withAccount ? AndroidAppLinkWithAccountOdaTerminalForm : AndroidAppLinkWithoutAccountOdaTerminalForm;\n    this.backLink = this.add(AndroidAppLinkTerminalViewFooter, {\n      options: {\n        name: 'back-to-preselect',\n        label: loc('oform.back', 'login'),\n      }\n    }).last();\n    this.renderForm();\n  },\n\n  handleSwitchBackToPreselect() {\n    this.Body = AndroidAppLinkPreselectForm;\n    this.backLink && this.backLink.remove();\n    this.render();\n  },\n});\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst generatePasswordPolicyHtml = function(form, rulesList, prepend) {\n  form.add(\n    View.extend({\n      tagName: 'section',\n      template:\n        hbs`<div class=\"password-authenticator--heading\">\n        {{i18n code=\"password.complexity.requirements.header\" bundle=\"login\"}}\n      </div>\n      <ul class=\"password-authenticator--list\">\n        {{#each rulesList}}<li>{{this}}</li>{{/each}}\n      </ul>`,\n      getTemplateData: () => ({ rulesList }),\n      attributes: {\n        'data-se': 'password-authenticator--rules'\n      }\n    }),\n    {\n      prepend,\n      selector: '.o-form-fieldset-container',\n    }\n  );\n};\n\nexport {\n  generatePasswordPolicyHtml,\n};","import { loc, Model, _ } from '@okta/courage';\nimport { BaseForm, BaseFooter, BaseView, createIdpButtons } from '../internals';\nimport { FORMS as RemediationForms } from '../../ion/RemediationConstants';\nimport { getPasswordComplexityDescriptionForHtmlList } from '../utils/AuthenticatorUtil';\nimport { generatePasswordPolicyHtml } from './password/PasswordPolicyUtil';\nimport signInWithIdps from './signin/SignInWithIdps';\n\nconst Body = BaseForm.extend({\n  title() {\n    if (this.options.appState.getCurrentViewState().href.endsWith('idp/idx/enroll/update')) {\n      const attributes = this.options.appState.attributes;\n      if (attributes?.uiDisplay?.label) {\n        return loc('oie.registration.form.customize.label', 'login', [attributes.uiDisplay.label]);\n      } else {\n        return loc('oie.primaryauth.submit', 'login');\n      }\n    }\n    return loc('oie.registration.form.title', 'login');\n\n  },\n\n  save() {\n    if (this.options.appState.getCurrentViewState().href.endsWith('idp/idx/enroll/update')) {\n      const attributes = this.options.appState.attributes;\n      if (attributes?.uiDisplay?.buttonLabel) {\n        return loc('oie.registration.form.customize.buttonLabel', 'login', [attributes.uiDisplay.buttonLabel]);\n      } else {\n        return loc('oie.registration.form.update.submit', 'login');\n      }\n    }\n    return loc('oie.registration.form.submit', 'login');\n\n  },\n  saveForm() {\n    // SIW customization hook for registration\n    this.settings.preRegistrationSubmit(this.model.toJSON(),\n      (postData) => {\n        this.model.attributes = {...this.model.attributes, ...this.model.parse(postData)};\n        BaseForm.prototype.saveForm.call(this, this.model);\n      },\n      (error) => this.model.trigger('error', this.model, {\n        responseJSON: error,\n      })\n    );\n  },\n  triggerAfterError(model, error) {\n    // render errors to view\n    const hasErrors = error?.responseJSON?.errorCauses\n      && Array.isArray(error.responseJSON.errorCauses);\n\n    if (hasErrors) {\n      error.responseJSON.errorCauses.forEach((err) => {\n        // only do this for invalid password for password with SSR\n        if (err.errorKey?.includes('password.passwordRequirementsNotMet')) {\n          err.errorSummary = loc('registration.error.password.passwordRequirementsNotMet', 'login');\n        } \n      });\n    }\n\n    this.options.appState.trigger('afterError', error);\n  },\n});\n\nconst Footer = BaseFooter.extend({\n  links() {\n    const links = [];\n    if (this.options.appState.hasRemediationObject(RemediationForms.SELECT_IDENTIFY)) {\n      links.push({\n        'type': 'link',\n        'label': loc('haveaccount', 'login'),\n        'name': 'back',\n        'actionPath': RemediationForms.SELECT_IDENTIFY,\n      });\n    }\n    return links;\n  }\n});\n\nexport default BaseView.extend({\n  Body,\n  Footer,\n  createModelClass(currentViewState, optionUiSchemaConfig, settings) {\n    const currentSchema = JSON.parse(JSON.stringify((currentViewState.uiSchema)));\n    let ModelClass = BaseView.prototype.createModelClass.apply(this, arguments, currentViewState);\n\n    ModelClass = ModelClass.extend({\n      toJSON: function() {\n        const modelJSON = Model.prototype.toJSON.call(this, arguments, currentViewState);\n        // delete optional attributes if they are empty and not required\n        if(modelJSON.userProfile) {\n          const uiSchema = currentViewState.uiSchema;\n          const userProfile = modelJSON.userProfile;\n          _.each(userProfile, (value, name) => {\n            if (_.isEmpty(value)) {\n              const uiSchemaProperty = uiSchema.find(schema => schema.name === `userProfile.${name}`);\n              if (!_.isUndefined(uiSchemaProperty) && !uiSchemaProperty.required) {\n                delete userProfile[name];\n              }\n            }\n          });\n        }\n        return modelJSON;\n      }\n    });\n\n    settings.parseRegistrationSchema(currentSchema,\n      (schema) => {\n        if (!_.isEqual(schema, currentViewState.uiSchema)) {\n          currentViewState.uiSchema = schema;\n          ModelClass = BaseView.prototype.createModelClass.call(this, currentViewState, optionUiSchemaConfig);\n        }\n      },\n      (error) => {\n        ModelClass = ModelClass.extend({\n          local: {\n            parseSchemaError: {\n              value: error,\n              type: 'object',\n            },\n            ...ModelClass.prototype.local\n          },\n        });\n      }\n    );\n    return ModelClass;\n  },\n  postRender() {\n    BaseView.prototype.postRender.apply(this, arguments);\n\n    const modelError = this.model.get('parseSchemaError');\n\n    if (modelError) {\n      this.model.trigger('error', this.model, {\n        responseJSON: modelError,\n      });\n    }\n\n    // Prompt for password w/ SSR if enabled (credentials object in remediation)\n    this.renderPasswordPolicySettings();\n\n    const idpButtons = createIdpButtons(this.options);\n    if (Array.isArray(idpButtons) && idpButtons.length) {\n      this._addIdpView(idpButtons);\n    }\n    \n  },\n  renderPasswordPolicySettings() {\n    // retrieve password policy from \"credentials\" object in remediation\n    const currentViewState = this.options.currentViewState.value;\n    const credentials = currentViewState.filter((obj) => { return obj.name === 'credentials'; })[0];\n\n    // if \"passcode\" is present in \"credentials\", render password rules\n    const form = credentials?.form?.value;\n    if (form && form.filter((obj) => { return obj.name === 'passcode'; })) {\n      generatePasswordPolicyHtml(this,\n        getPasswordComplexityDescriptionForHtmlList(credentials?.relatesTo?.value?.settings),\n        false);\n    }\n  },\n\n  _addIdpView(idpButtons) {\n    // We check the 'idpDisplay' option config to determine whether to render the idp buttons \n    // above or below the login fields\n    const idpDisplay = this.options.settings.get('idpDisplay');\n    const isPrimaryIdpDisplay = idpDisplay && idpDisplay.toUpperCase() === 'PRIMARY';\n\n    this.add(signInWithIdps, {\n      prepend: isPrimaryIdpDisplay,\n      selector: isPrimaryIdpDisplay ? '.o-form-fieldset-container' : '.o-form-button-bar',\n      options: {\n        idpButtons,\n        isPrimaryIdpDisplay\n      }\n    });\n  },\n});\n","import { loc, View } from '@okta/courage';\nimport { BaseFooter, BaseForm, BaseView } from '../internals';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { getSkipSetupLink } from '../utils/LinksUtil';\n\nconst Body = BaseForm.extend({\n\n  className: 'profile-update',\n\n  title() {\n    return loc('oie.profile.additional.title', 'login');\n  },\n  \n  save() {\n    return loc('enroll.choices.submit.finish', 'login');\n  },\n\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    uiSchemas.forEach(input => {\n      if (input.name === 'userProfile.secondEmail') {\n        input.explain = View.extend({\n          template: hbs`{{{i18n\n            code=\"oie.profile.additional.secondemail.subtitle\"\n            bundle=\"login\" \n            $1=\"<span class='strong'>$1</span>\"}}}`\n        });\n      }\n    });\n    \n    return uiSchemas;\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n  },\n});\n\nconst Footer = BaseFooter.extend({\n  className: 'auth-footer side-by-side-links',\n  links: function() {\n    const { uiSchema } = this.options.currentViewState;\n    const optionalParams = uiSchema.filter(item => item.required === false);\n    if(uiSchema.length === optionalParams.length) {\n      return getSkipSetupLink(this.options.appState, loc('oie.enroll.skip.profile', 'login'));\n    } else {\n      this.$el.removeClass('.side-by-side-links');\n    }\n  }\n});\n\nexport default BaseView.extend({\n  Body,\n  Footer,\n\n  postRender() {\n    BaseView.prototype.postRender.apply(this, arguments);\n    /**\n     * As per requirement of this flow set secondEmail default to empty string, if exists in remediation\n     * ideally server should have passed default string in remediation\n     */\n    if (this.options.appState.getSchemaByName('userProfile.secondEmail')) {\n      this.model.set('userProfile.secondEmail', '');\n    }\n  }\n});","import { BaseForm, BaseView } from '../../internals';\nimport { loc } from '@okta/courage';\n\nconst Body = BaseForm.extend({\n\n  title() {\n    return loc('oie.activation.request.email.title.expire', 'login');\n  },\n\n  save() {\n    return loc('oie.activation.request.email.button', 'login');\n  },\n});\n\nexport default BaseView.extend({\n  Body\n});","import { BaseForm, BaseView } from '../internals';\nimport { loc } from '@okta/courage';\n\nconst Body = BaseForm.extend({\n  title: function() {\n    return loc('oie.select.authenticators.enroll.title', 'login');\n  },\n  subtitle: function() {\n    const subtitle = this.options.settings.get('brandName') ?\n      loc('oie.select.authenticators.enroll.subtitle.custom', 'login', [this.options.settings.get('brandName')]):\n      loc('oie.select.authenticators.enroll.subtitle', 'login');\n    return subtitle;\n  },\n  noButtonBar: true,\n});\n\nexport default BaseView.extend({\n  Body,\n});\n\n","import { BaseForm, BaseView } from '../internals';\nimport { createCallout, loc } from '@okta/courage';\nimport BaseFooter from '../internals/BaseFooter';\nimport {getFactorPageCustomLink} from '../utils/LinksUtil';\n\nconst UNLOCK_USER_SUCCESS_MESSAGE = 'oie.selfservice.unlock_user.landing.to.app.success.message';\n\nexport const Body = BaseForm.extend({\n  title: function() {\n    if (this.isPasswordRecoveryFlow())  {\n      return loc('password.reset.title.generic', 'login');\n    }\n    return loc('oie.select.authenticators.verify.title', 'login');\n  },\n  subtitle: function() {\n    if (this.isPasswordRecoveryFlow())  {\n      return loc('oie.password.reset.verification', 'login');\n    }\n    if (this.isUnlockSuccess()) {\n      const container = '.o-form-error-container';\n      const text = loc('oie.select.authenticators.verify.subtitle', 'login');\n      this.add(`<div class=\"ion-messages-container\"><p>${text}</p></div>`, container);\n      return;\n    }\n    return loc('oie.select.authenticators.verify.subtitle', 'login');\n  },\n  isPasswordRecoveryFlow() {\n    return this.options.appState.get('isPasswordRecovery');\n  },\n  noButtonBar: true,\n  showMessages() {\n    if (this.isUnlockSuccess()) {\n      let options = {};\n      options.subtitle = loc('oie.selfservice.unlock_user.landing.to.app.success.message', 'login');\n      options.type = 'success';\n      options = createCallout(options);\n      BaseForm.prototype.showMessages.call(this, options);\n      return;\n    }\n    BaseForm.prototype.showMessages.call(this);\n  },\n  isUnlockSuccess() {\n    return this.options.appState.containsMessageWithI18nKey(UNLOCK_USER_SUCCESS_MESSAGE);\n  }\n});\n\nexport default BaseView.extend({\n  Body,\n  Footer: BaseFooter.extend({\n    links() {\n      return getFactorPageCustomLink(this.options.appState, this.options.settings);\n    },\n  }),\n});\n","import { BaseForm, BaseView } from '../../internals';\nimport { loc } from '@okta/courage';\n\nconst UnlockAccountView = BaseForm.extend({\n  noButtonBar: true,\n  title: () => {\n    return loc('unlockaccount', 'login');\n  }\n});\n\nexport default BaseView.extend({\n  initialize() {\n    BaseView.prototype.initialize.apply(this, arguments);\n    this.Body = UnlockAccountView;\n  }\n});","import { loc } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport {\n  getPasswordComplexityDescriptionForHtmlList,\n  removeRequirementsFromError } from '../../utils/AuthenticatorUtil';\nimport { generatePasswordPolicyHtml } from './PasswordPolicyUtil';\n\nconst Body = BaseForm.extend({\n  title() {\n    return loc('oie.password.enroll.title', 'login');\n  },\n  save() {\n    return loc('oform.next', 'login');\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    const policy = this.getPasswordPolicySettings();\n    this.displayPasswordPolicy(policy);\n  },\n\n  displayPasswordPolicy(policy) {\n    if (policy) {\n      const rulesList = getPasswordComplexityDescriptionForHtmlList( policy );\n      generatePasswordPolicyHtml(this, rulesList, true);\n    }\n  },\n\n  triggerAfterError(model, error) {\n    error.responseJSON = removeRequirementsFromError(error.responseJSON);\n    this.options.appState.trigger('afterError', error);\n  },\n\n  getPasswordPolicySettings() {\n    // This will be overridden by following scenario since the policies could be different for those.\n    // - password reset (`ReEnrollAuthenticatorPasswordView.js`)\n    //\n    const relatesToObject = this.options.currentViewState.relatesTo;\n    return relatesToObject?.value?.settings;\n  },\n\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    const confirmPassword = {\n      name: 'confirmPassword',\n      label: loc('oie.password.confirmPasswordLabel','login'),\n      type: 'password',\n      'label-top': true,\n      params: {\n        showPasswordToggle: this.settings.get('showPasswordToggle'),\n      }\n    };\n\n    const updatedSchema = [];\n\n    for (let field of uiSchemas) {\n      updatedSchema.push(field);\n      if (field.name === 'credentials.passcode') {\n        updatedSchema.push(confirmPassword);\n      }\n    }\n\n    return updatedSchema;\n  }\n});\n\nexport default BaseAuthenticatorView.extend({\n\n  Body,\n\n  createModelClass() {\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n    const local = Object.assign(\n      {\n        confirmPassword: {\n          type: 'string',\n          required: true,\n        }\n      },\n      ModelClass.prototype.local,\n    );\n    return ModelClass.extend({\n      local,\n      validate() {\n        if (this.get('credentials.passcode') !== this.get('confirmPassword') &&\n            this.get('credential.value') !== this.get('confirmPassword')) {\n          const errors = {\n            'confirmPassword': loc('password.error.match', 'login'),\n          };\n          return errors;\n        } else {\n          return null;\n        }\n      }\n    });\n  }\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport AuthenticatorFooter from '../../components/AuthenticatorFooter';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport { getForgotPasswordLink } from '../../utils/LinksUtil';\nimport { isCustomizedI18nKey } from '../../../ion/i18nTransformer';\n\n\nconst Body = BaseForm.extend({\n\n  title: function() {\n    return loc('oie.password.challenge.title', 'login');\n  },\n\n  save: function() {\n    return loc('mfa.challenge.verify', 'login');\n  },\n\n  /**\n   * Update UI schemas for customization from .widgetrc.js or Admin Customization settings page.\n   * @returns Array\n   */\n  getUISchema() {\n    const schemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n\n    const { settings } = this.options;\n    const passwordExplainLabeli18nKey = 'primaryauth.password.tooltip';\n\n    const passwordSchema = schemas.find(({name}) => name === 'credentials.passcode');\n\n    if (passwordSchema && isCustomizedI18nKey(passwordExplainLabeli18nKey, settings)) {\n      passwordSchema.explain = loc(passwordExplainLabeli18nKey, 'login');\n      passwordSchema['explain-top'] = true;\n    }\n\n    return schemas;\n  },\n\n});\n\nconst Footer = AuthenticatorFooter.extend({\n  links: function() {\n    let links = AuthenticatorFooter.prototype.links.apply(this, arguments);\n\n    links = getForgotPasswordLink(this.options.appState, this.options.settings).concat(links);\n\n    return links;\n  }\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n  Footer,\n});\n","import { loc } from '@okta/courage';\nimport EnrollAuthenticatorPasswordView from './EnrollAuthenticatorPasswordView';\n\nconst Body = EnrollAuthenticatorPasswordView.prototype.Body.extend({\n\n  className: 'password-authenticator',\n\n  title() {\n    const title = this.options.settings.get('brandName')?\n      loc('password.expired.title.specific', 'login', [this.options.settings.get('brandName')]):\n      loc('password.expired.title.generic', 'login');\n    return title;\n  },\n\n  save() {\n    return loc('password.expired.submit', 'login');\n  },\n\n  getPasswordPolicySettings() {\n    return this.options.appState.get('recoveryAuthenticator')?.settings\n      || this.options.appState.get('enrollmentAuthenticator')?.settings;\n  },\n\n});\n\nexport default EnrollAuthenticatorPasswordView.extend({ Body });\n","import { loc } from '@okta/courage';\nimport { BaseFooter } from '../../internals';\nimport EnrollAuthenticatorPasswordView from './EnrollAuthenticatorPasswordView';\n\nconst Body = EnrollAuthenticatorPasswordView.prototype.Body.extend({\n  className: 'password-authenticator',\n  subtitle() {\n    if (this.options.settings.get('brandName')) {\n      return loc('password.expiring.subtitle.specific', 'login', [this.options.settings.get('brandName')]);\n    }\n  },\n  title() {\n    const passwordPolicy = this.getPasswordPolicySettings() || {};\n    const daysToExpiry = passwordPolicy.daysToExpiry;\n\n    if (daysToExpiry > 0) {\n      return loc('password.expiring.title', 'login', [daysToExpiry]);\n    } else if (daysToExpiry === 0) {\n      return loc('password.expiring.today', 'login');\n    } else {\n      return loc('password.expiring.soon', 'login');\n    }\n  },\n\n  save() {\n    return loc('password.expired.submit', 'login');\n  },\n  showMessages() {\n    // if brandName is configured and messages is present, render as subtitle with brandName in context\n    if (this.options.settings.get('brandName')) {\n      return null;\n    }\n    // else if brandName is not set, render messages object sent from server as text\n    EnrollAuthenticatorPasswordView.prototype.Body.prototype.showMessages.apply(this, arguments);\n  },\n});\n\nconst Footer = BaseFooter.extend({\n  links() {\n    const links = [];\n    if (this.options.appState.hasRemediationObject('skip')) {\n      links.push({\n        'type': 'link',\n        'label': loc('password.expiring.later', 'login'),\n        'name': 'skip',\n        'actionPath': 'skip',\n      });\n    }\n    return links;\n  }\n});\n\nexport default EnrollAuthenticatorPasswordView.extend({ Body, Footer });\n","import { loc } from '@okta/courage';\nimport EnrollAuthenticatorPasswordView from './EnrollAuthenticatorPasswordView';\n\nconst Body = EnrollAuthenticatorPasswordView.prototype.Body.extend({\n\n  className: 'password-authenticator',\n\n  title() {\n    const title = this.options.settings.get('brandName')?\n      loc('password.reset.title.specific', 'login', [this.options.settings.get('brandName')]):\n      loc('password.reset.title.generic', 'login');\n    return title;\n  },\n\n  save() {\n    return loc('password.reset', 'login');\n  },\n\n});\n\nexport default EnrollAuthenticatorPasswordView.extend({ Body });\n","import { View } from '@okta/courage';\nimport { SHOW_RESEND_TIMEOUT } from '../../utils/Constants';\nimport sessionStorageHelper from '../../../client/sessionStorageHelper';\n\nexport default View.extend({\n\n  postRender() {\n    this.showCalloutAfterTimeout();\n  },\n\n  showCalloutAfterTimeout() {\n    const timeStamp = sessionStorageHelper.getResendTimestamp();\n    if (!timeStamp) {\n      sessionStorageHelper.setResendTimestamp(Date.now());\n    }\n\n    // We keep track of a 'global' timestamp in sessionStorage because if the SIW does a re-render,\n    // we don't want to force the user to wait another 30s again to see the resend link. With this\n    // the user will wait AT MOST 30s until they see the resend link.\n    this.showMeInterval = setInterval(() => {\n      const start = sessionStorageHelper.getResendTimestamp();\n      const now = Date.now();\n      if (now - start >= SHOW_RESEND_TIMEOUT) {\n        this.$el.removeClass('hide');\n        clearInterval(this.showMeInterval);\n        sessionStorageHelper.removeResendTimestamp();\n      }\n    }, 250);\n  },\n\n  remove() {\n    View.prototype.remove.apply(this, arguments);\n    clearInterval(this.showMeInterval);\n\n    const formName = this.options.appState.get('currentFormName');\n    const resendContext = this.options.appState.get('currentAuthenticator')?.resend \n      || this.options.appState.get('currentAuthenticatorEnrollment')?.resend;\n    const didFormNameChange = this.options.model.get('formName') !== formName;\n\n    // Clear resend timeStamp whenever we change views (this means we're navigating away from the resend view)\n    if (sessionStorageHelper.getResendTimestamp()\n      && (!resendContext || didFormNameChange)) {\n      sessionStorageHelper.removeResendTimestamp();\n    }    \n  },\n});\n","import { loc, createCallout } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport BaseResendView from '../shared/BaseResendView';\n\nconst ResendView = BaseResendView.extend(\n  {\n    // To be shown after a timeout\n    className: 'phone-authenticator-challenge__resend-warning hide',\n    events: {\n      'click a.resend-link': 'handleResendLink'\n    },\n\n    // Override this to change the resend action location from response\n    resendActionKey: 'currentAuthenticatorEnrollment-resend',\n\n    initialize() {\n      const resendText = (this.model.get('mode') === 'sms')\n        ? loc('oie.phone.verify.sms.resendText', 'login')\n        : loc('oie.phone.verify.call.resendText', 'login');\n      const linkText = (this.model.get('mode') === 'sms')\n        ? loc('oie.phone.verify.sms.resendLinkText', 'login')\n        : loc('oie.phone.verify.call.resendLinkText', 'login');\n      this.add(createCallout({\n        content: `${resendText}&nbsp;<a class='resend-link'>${linkText}</a>`,\n        type: 'warning',\n      }));\n    },\n\n    handleResendLink() {\n      this.options.appState.trigger('invokeAction', this.resendActionKey);\n      // Hide warning, but start a timeout again..\n      if (!this.el.classList.contains('hide')) {\n        this.el.classList.add('hide');\n      }\n      this.showCalloutAfterTimeout();\n    },\n  },\n);\n\nconst Body = BaseForm.extend(Object.assign(\n  {\n    className: 'phone-authenticator-challenge',\n\n    title() {\n      return loc('oie.phone.verify.title', 'login');\n    },\n\n    save() {\n      return loc('mfa.challenge.verify', 'login');\n    },\n\n    initialize() {\n      BaseForm.prototype.initialize.apply(this, arguments);\n      const sendText = (this.model.get('mode') === 'sms')\n        ? loc('oie.phone.verify.sms.codeSentText', 'login')\n        : loc('mfa.calling', 'login');\n      const enterCodeText = loc('oie.phone.verify.enterCodeText', 'login');\n      const carrierChargesText = loc('oie.phone.carrier.charges', 'login');\n      const isPhoneNumberAvailable = this.model.get('phoneNumber') !== loc('oie.phone.alternate.title', 'login');\n      let nicknameText = isPhoneNumberAvailable ? this.model.get('nickname') : '';\n      let extraNicknameCssClasses = '';\n      if (nicknameText !== '') {\n        nicknameText = ' (' + nicknameText + ')';\n        extraNicknameCssClasses = 'no-translate authenticator-verify-nickname';\n      }\n\n      const nicknameTemplate = nicknameText ? `<span ${ extraNicknameCssClasses ? 'class=\"' + \n      extraNicknameCssClasses + '\"' : ''}>\n      ${nicknameText}.</span>` : '<span class=\"no-translate\">.</span>';\n      const strongClass = this.model.get('phoneNumber') !== loc('oie.phone.alternate.title', 'login') ?\n        'strong no-translate' : '';\n      // Courage doesn't support HTML, hence creating a subtitle here.\n      this.add(`<div class=\"okta-form-subtitle\" data-se=\"o-form-explain\">\n        ${sendText}&nbsp;<span class='${strongClass}'>${this.model.escape('phoneNumber')}</span>\n        ${nicknameTemplate}\n        &nbsp;${enterCodeText}\n        <p>${carrierChargesText}</p>\n        </div>`, {\n        prepend: true,\n        selector: '.o-form-fieldset-container',\n      });\n    },\n\n    postRender() {\n      BaseForm.prototype.postRender.apply(this, arguments);\n      this.add(ResendView, {\n        selector: '.o-form-info-container',\n        prepend: true,\n      });\n    },\n  },\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n\n  createModelClass() {\n    const relatesToObject = this.options.currentViewState.relatesTo;\n    const { methods, profile, nickname } = relatesToObject?.value || {};\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n    const local = Object.assign({\n      mode: {\n        'value': methods[0].type,\n        'type': 'string',\n      },\n      phoneNumber: {\n        'value': profile?.phoneNumber ? profile.phoneNumber : loc('oie.phone.alternate.title', 'login'),\n        'type': 'string',\n      },\n      nickname: {\n        'value': nickname ? nickname : '',\n        'type': 'string',\n      }\n    }, ModelClass.prototype.local );\n    return ModelClass.extend({ local });\n  },\n});\n\nexport { ResendView };","import { loc } from '@okta/courage';\nimport {\n  default as ChallengeAuthenticatorPhoneView,\n  ResendView\n} from './ChallengeAuthenticatorPhoneView';\nimport { BaseForm } from '../../internals';\n\nconst EnrollResendView = ResendView.extend(\n  {\n    // To be shown after a timeout\n    className: 'phone-authenticator-enroll--warning hide',\n    resendActionKey: 'currentAuthenticator-resend',\n  },\n);\n\nconst Body = ChallengeAuthenticatorPhoneView.prototype.Body.extend(\n  {\n    className: 'phone-authenticator-enroll',\n\n    title() {\n      return loc('oie.phone.enroll.title', 'login');\n    },\n\n    postRender() {\n      BaseForm.prototype.postRender.apply(this, arguments);\n      this.add(EnrollResendView, {\n        selector: '.o-form-info-container',\n        prepend: true,\n      });\n    },\n  },\n);\n\nexport default ChallengeAuthenticatorPhoneView.extend({ Body });\n","import { _, loc, Model } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport CountryUtil from '../../../../util/CountryUtil';\n\nconst Body = BaseForm.extend({\n\n  className: 'phone-authenticator-enroll',\n\n  title() {\n    return loc('oie.phone.enroll.title', 'login');\n  },\n\n  subtitle() {\n    return this.model.get('authenticator.methodType') === 'voice'\n      ? loc('oie.phone.enroll.call.subtitle', 'login')\n      : loc('oie.phone.enroll.sms.subtitle', 'login');\n  },\n\n  render() {\n    BaseForm.prototype.render.apply(this, arguments);\n    const selectedMethod = this.model.get('authenticator.methodType');\n    const phoneField = this.el.querySelector('.phone-authenticator-enroll__phone');\n    const extensionField = this.el.querySelector('.phone-authenticator-enroll__phone-ext');\n\n    if (selectedMethod === 'voice') {\n      if (!phoneField.classList.contains('phone-authenticator-enroll__phone--small')) {\n        phoneField.classList.add('phone-authenticator-enroll__phone--small');\n      }\n      extensionField.classList.remove('hide');\n    }\n\n    if (selectedMethod === 'sms') {\n      phoneField.classList.remove('phone-authenticator-enroll__phone--small');\n      if (!extensionField.classList.contains('hide')) {\n        extensionField.classList.add('hide');\n      }\n    }\n\n    this.el.querySelector('.phone-authenticator-enroll__phone-code').innerText = `+${this.model.get('phoneCode')}`;\n  },\n\n  handlePhoneCodeChange() {\n    const countryCodeField = this.el.querySelector('.phone-authenticator-enroll__phone-code');\n    countryCodeField.innerText = `+${this.model.get('phoneCode')}`;\n  },\n\n  save() {\n    return this.model.get('authenticator.methodType') === 'voice'\n      ? loc('oie.phone.call.primaryButton', 'login')\n      : loc('oie.phone.sms.primaryButton', 'login');\n  },\n\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n\n    // TODO: Using underscore to support IE, replace with Array.prototype methods (find, findIndex) when IE\n    // support is removed\n    const phoneNumberUISchemaIndex = _.findIndex(uiSchemas, ({ name }) => name === 'authenticator.phoneNumber');\n\n    const countryUISchema = {\n      'label-top': true,\n      label: loc('country.label', 'login'),\n      type: 'select',\n      options: CountryUtil.getCountries(),\n      name: 'country',\n      wide: true,\n    };\n\n    const inputId = 'okta-phone-number-input';\n    \n    // Create an input group - serves as a display wrapper\n    const phoneNumberWithCodeUISchema = {\n      label: loc('mfa.phoneNumber.placeholder', 'login'),\n      inputId,\n      type: 'group',\n      modelType: 'string',\n      'label-top': true,\n      name: 'phoneCode',\n      className : 'phone-authenticator-enroll__phone',\n      input: [\n        {\n          type: 'label',\n          /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n          label: `+${this.model.get('phoneCode')}`,\n          className: 'phone-authenticator-enroll__phone-code no-translate',\n        },\n        Object.assign({ inputId }, uiSchemas[phoneNumberUISchemaIndex]),\n      ],\n    };\n\n    const extensionUISchema = {\n      label: loc('phone.extention.label', 'login'),\n      type: 'text',\n      // Need to manually hide and show\n      // - toggleWhen puts display: block on the element when it unhides hence can't be used.\n      //   Because in this case, the element needs to be rendered as an inline-block.\n      // - showWhen has an animation on the element when unhiding\n      //   The animation makes the element look weird because of the way it is positioned,\n      //   hence can't be used\n      className: 'phone-authenticator-enroll__phone-ext hide',\n      'label-top': true,\n      name: 'extension',\n    };\n\n    if (phoneNumberUISchemaIndex !== -1) {\n      // Replace phoneNumberUISchema..\n      uiSchemas.splice(phoneNumberUISchemaIndex, 1, phoneNumberWithCodeUISchema);\n      // Add countryUISchema before & extensionUISchema after phone..\n      uiSchemas.splice(phoneNumberUISchemaIndex, 0, countryUISchema);\n      uiSchemas.splice(phoneNumberUISchemaIndex + 2, 0, extensionUISchema);\n    }\n\n    const methodType = _.find(uiSchemas,  ({ name }) => name === 'authenticator.methodType');\n\n    if (methodType && methodType.options.length === 1) {\n      methodType.className = 'hide';\n    }\n\n    return uiSchemas;\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    this.listenTo(this.model, 'change:authenticator.methodType', this.render.bind(this));\n    this.listenTo(this.model, 'change:phoneCode', this.handlePhoneCodeChange.bind(this));\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n\n  Body,\n\n  createModelClass() {\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n    const local = Object.assign(\n      {\n        country: {\n          'value': this.settings.get('defaultCountryCode'),\n          'type': 'string',\n        },\n        extension: {\n          'type': 'string',\n        },\n      },\n      ModelClass.prototype.local,\n    );\n    const derived = Object.assign(\n      {\n        phoneCode: {\n          deps: [ 'country' ],\n          fn: function(country) {\n            return CountryUtil.getCallingCodeForCountry(country);\n          },\n        },\n      },\n      ModelClass.prototype.derived,\n    );\n    return ModelClass.extend({\n      local,\n      derived,\n      toJSON: function() {\n        const modelJSON = Model.prototype.toJSON.call(this, arguments);\n        const extension = this.get('extension');\n        const phoneCode = this.get('phoneCode');\n\n        // Add country code..\n        let formattedPhoneNumber = `+${phoneCode}${modelJSON.authenticator.phoneNumber}`;\n\n        // Add extension if present..\n        if (modelJSON.authenticator.methodType === 'voice' && extension?.trim().length) {\n          formattedPhoneNumber = `${formattedPhoneNumber}x${extension}`;\n        }\n        // Override phone with formatted number..\n        modelJSON.authenticator.phoneNumber = formattedPhoneNumber;\n        return modelJSON;\n      },\n    });\n  },\n});\n","import { _, loc } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseForm.extend(\n  {\n    className: 'phone-authenticator-challenge',\n    events: {\n      'click a.phone-authenticator-challenge__link' : 'handleSecondaryLinkClick'\n    },\n\n    title() {\n      return loc('oie.phone.verify.title', 'login');\n    },\n\n    save() {\n      return (this.model.get('primaryMode') === 'sms')\n        ? loc('oie.phone.sms.primaryButton', 'login')\n        : loc('oie.phone.call.primaryButton', 'login');\n    },\n\n    handleSecondaryLinkClick(e) {\n      e.preventDefault();\n      // Call the API to send a code via secondary mode\n      const secondaryMode = this.model.get('secondaryMode');\n      this.model.set('authenticator.methodType', secondaryMode);\n      this.saveForm(this.model);\n    },\n\n    initialize() {\n      // This is needed when user clicks on secondary (say voice) and call fails with ratelimit server-side error.\n      // Then the user clicks primary button (say sms) and right methodType needs to be sent.\n      this.model.on('error', () => this.model.set('authenticator.methodType', this.model.get('primaryMode')));\n      BaseForm.prototype.initialize.apply(this, arguments);\n      const sendText = ( this.model.get('primaryMode') === 'sms' )\n        ? loc('oie.phone.verify.sms.sendText', 'login')\n        : loc('oie.phone.verify.call.sendText', 'login');\n      const carrierChargesText = loc('oie.phone.carrier.charges', 'login');\n      const isPhoneNumberAvailable = this.model.get('phoneNumber') !== loc('oie.phone.alternate.title', 'login');\n      const extraCssClasses = isPhoneNumberAvailable ? 'strong no-translate' : '';\n      let nicknameText = isPhoneNumberAvailable ? this.model.get('nickname') : '';\n      let extraNicknameCssClasses = '';\n      if (nicknameText !== '') {\n        nicknameText = ' (' + nicknameText + ')';\n        extraNicknameCssClasses = 'strong no-translate authenticator-verify-nickname';\n      }\n      const nicknameTemplate = nicknameText ? `<span ${ extraNicknameCssClasses ? \n        'class=\"' + extraNicknameCssClasses + '\"' : ''}>\n      ${nicknameText}.</span>` : '<span class=\"no-translate\">.</span>';\n      // Courage doesn't support HTML, hence creating a subtitle here.\n      this.add(`<div class=\"okta-form-subtitle\" data-se=\"o-form-explain\">${sendText}\n        <span ${ extraCssClasses ? 'class=\"' + extraCssClasses + '\"' : ''}>\n        ${this.model.escape('phoneNumber')}</span>${nicknameTemplate}\n        <p>${carrierChargesText}</p>\n      </div>`);\n    },\n\n    getUISchema() {\n      // Change the UI schema to not display radios here.\n      const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n      return uiSchemas.filter(schema => schema.name !== 'authenticator.methodType');\n    },\n\n    render() {\n      BaseForm.prototype.render.apply(this, arguments);\n      const secondaryMode = this.model.get('secondaryMode');\n      if (secondaryMode) {\n        const secondaryButtonTitle = (secondaryMode === 'sms')\n          ? loc('oie.phone.sms.secondaryButton', 'login')\n          : loc('oie.phone.call.secondaryButton', 'login');\n        this.add(\n          `<a href=\"#\"\n            class=\"link phone-authenticator-challenge__link\"\n            data-se=\"phone-authenticator-challenge__link\">${secondaryButtonTitle}</a>`,\n          '.o-form-button-bar');\n      }\n    },\n  },\n);\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n\n  createModelClass({ uiSchema }) {\n    // It is important to get methods from here to maintain single source of truth.\n    const { options: methods } = _.find(uiSchema, schema => schema.name === 'authenticator.methodType');\n    const relatesToObject = this.options.currentViewState.relatesTo;\n    const { profile, nickname } = relatesToObject?.value || {};\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n    const local = Object.assign({\n      primaryMode: {\n        'value': methods[0].value,\n        'type': 'string',\n      },\n      secondaryMode: {\n        'value': methods[1] && methods[1].value,\n        'type': 'string',\n      },\n      phoneNumber: {\n        'value': profile?.phoneNumber ? profile.phoneNumber : loc('oie.phone.alternate.title', 'login'),\n        'type': 'string',\n      },\n      nickname: {\n        'value': nickname ? nickname : '',\n        'type': 'string',\n      },\n    }, ModelClass.prototype.local);\n    return ModelClass.extend({ local });\n  },\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseForm.extend({\n  title() {\n    return loc('oie.security.question.enroll.title', 'login');\n  },\n  save() {\n    return loc('mfa.challenge.verify', 'login');\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseForm.extend({\n  title() {\n    return loc('oie.security.question.challenge.title', 'login');\n  },\n\n  save() {\n    return loc('mfa.challenge.verify', 'login');\n  },\n\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    const questionKey = uiSchemas.filter(s => s.name.indexOf('questionKey') >= 0);\n    const answer = uiSchemas.filter(s => s.name.indexOf('answer') >= 0);\n\n    /**\n     * At verify SQ case,\n     * 'questionKey' is read-only hence it won't show up in UI anyway.\n     * 'answer' has label 'answer' but apparently UI want to display the\n     * actual question (label of `questionKey`) as better user experience.\n     */\n    if (questionKey.length === 1 && answer.length === 1) {\n      answer[0].label = questionKey[0].label;\n    }\n\n    return uiSchemas;\n  }\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc, View, createCallout } from '@okta/courage';\nimport BrowserFeatures from 'util/BrowserFeatures';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  // eslint-disable-next-line max-len\n  template: hbs`<p class=\"idx-webauthn-enroll-text\">{{i18n code=\"oie.enroll.webauthn.instructions\" bundle=\"login\"}}</p>`,\n  initialize() {\n    const relatesToObject = this.options.currentViewState.relatesTo;\n    const activationData = relatesToObject?.value.contextualData.activationData;\n    if (BrowserFeatures.isEdge()) {\n      this.add(View.extend({\n        tagName: 'p',\n        className: 'idx-webauthn-enroll-text-edge',\n        template: hbs`{{i18n code=\"oie.enroll.webauthn.instructions.edge\" bundle=\"login\"}}`\n      }));\n    }\n    if (activationData.authenticatorSelection.userVerification === 'required') {\n      this.add(createCallout({\n        className: 'uv-required-callout',\n        size: 'slim',\n        type: 'warning',\n        subtitle: loc('oie.enroll.webauthn.uv.required.instructions', 'login'),\n      }));\n    }\n    this.add('<div data-se=\"webauthn-waiting\" class=\"okta-waiting-spinner\"></div>');\n  },\n});\n","import { _, loc, createCallout, createButton } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport webauthn from 'util/webauthn';\nimport CryptoUtil from 'util/CryptoUtil';\nimport EnrollWebauthnInfoView from './EnrollWebauthnInfoView';\nimport { getMessageFromBrowserError } from '../../../ion/i18nTransformer';\n\nfunction getExcludeCredentials(authenticatorEnrollments = []) {\n  const credentials = [];\n  authenticatorEnrollments.forEach((enrollement) => {\n    if (enrollement.key === 'webauthn') {\n      credentials.push({\n        type: 'public-key',\n        id: CryptoUtil.strToBin(enrollement.credentialId),\n      });\n    }\n  });\n  return credentials;\n}\n\nconst Body = BaseForm.extend({\n  title() {\n    return loc('oie.enroll.webauthn.title', 'login');\n  },\n  className: 'oie-enroll-webauthn',\n  modelEvents: {\n    'error': '_stopEnrollment',\n  },\n  getUISchema() {\n    const schema = [];\n    // Returning custom array so no input fields are displayed for webauthn\n    if (webauthn.isNewApiAvailable()) {\n      schema.push({\n        View: EnrollWebauthnInfoView,\n      });\n      schema.push({\n        View: createButton({\n          className: 'webauthn-setup button button-primary button-wide',\n          title: loc('oie.enroll.webauthn.save', 'login'),\n          click: () => {\n            this.triggerWebauthnPrompt();\n          },\n        }),\n      });\n    } else {\n      schema.push({\n        View: createCallout({\n          className: 'webauthn-not-supported',\n          type: 'error',\n          subtitle: loc('oie.webauthn.error.not.supported', 'login'),\n        }),\n      });\n    }\n    return schema;\n  },\n  triggerWebauthnPrompt() {\n    this.$el.find('.o-form-error-container').empty();\n    this._startEnrollment();\n    const relatesToObject = this.options.currentViewState.relatesTo;\n    const activationData = relatesToObject?.value.contextualData.activationData;\n    if (webauthn.isNewApiAvailable()) {\n      const excludeCredentials = activationData.authenticatorSelection?.requireResidentKey === true ?\n        [] :\n        getExcludeCredentials(this.options.appState.get('authenticatorEnrollments').value);\n      const options = _.extend({}, activationData, {\n        challenge: CryptoUtil.strToBin(activationData.challenge),\n        user: {\n          id: CryptoUtil.strToBin(activationData.user.id),\n          name: activationData.user.name,\n          displayName: activationData.user.displayName\n        },\n        excludeCredentials\n      });\n      // AbortController is not supported in IE11\n      if (typeof AbortController !== 'undefined') {\n        this.webauthnAbortController = new AbortController();\n      }\n      navigator.credentials.create({\n        publicKey: options,\n        signal: this.webauthnAbortController && this.webauthnAbortController.signal\n      }).then((newCredential) => {\n        this.model.set({\n          credentials : {\n            clientData: CryptoUtil.binToStr(newCredential.response.clientDataJSON),\n            attestation: CryptoUtil.binToStr(newCredential.response.attestationObject),\n            // example data: [\"nfc\", \"usb\"]\n            transports: webauthn.processWebAuthnResponse(newCredential.response.getTransports, newCredential.response),\n            // example data: {\"credProps\":{\"rk\":true}}\n            clientExtensions: webauthn.processWebAuthnResponse(newCredential.getClientExtensionResults, newCredential)\n          }\n        });\n        this.saveForm(this.model);\n      })\n        .catch((error) => {\n          this.model.trigger('error', this.model, {responseJSON: {errorSummary: getMessageFromBrowserError(error)}});\n        }).finally(() => {\n          this.webauthnAbortController = null;\n        });\n    }\n  },\n  _startEnrollment: function() {\n    this.$('.okta-waiting-spinner').show();\n    this.$('.webauthn-setup').hide();\n  },\n\n  _stopEnrollment: function() {\n    this.$('.okta-waiting-spinner').hide();\n    this.$('.webauthn-setup').show();\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n  postRender() {\n    BaseAuthenticatorView.prototype.postRender.apply(this, arguments);\n    this.$el.find('.o-form-button-bar [type=\"submit\"]').remove();\n  },\n});\n","import { loc, View, createCallout } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  // eslint-disable-next-line max-len\n  template: hbs`<p class=\"idx-webauthn-verify-text\">{{i18n code=\"oie.verify.webauthn.instructions\" bundle=\"login\"}}</p>`,\n  initialize() {\n    const relatesToObject = this.options.currentViewState.relatesTo;\n    const challengeData = relatesToObject?.value.contextualData.challengeData;\n    if (challengeData.userVerification === 'required') {\n      this.add(createCallout({\n        className: 'uv-required-callout',\n        size: 'slim',\n        type: 'warning',\n        subtitle: loc('oie.verify.webauthn.uv.required.instructions', 'login'),\n      }));\n    }\n    this.add('<div data-se=\"webauthn-waiting\" class=\"okta-waiting-spinner\"></div>');\n  },\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport AuthenticatorFooter from './AuthenticatorFooter';\n\nconst OKTA_AUTHENTICATOR = 'Okta_Authenticator';\n\nconst CantVerifyInfoVerifyFlowView = View.extend({\n  id: 'help-description-container',\n  className: 'help-description js-help-description',\n  template: hbs`\n      <h3>{{i18n code=\"oie.verify.webauthn.cant.verify.biometric.authenticator.title\" bundle=\"login\"}}</h3><br>\n      <p>{{i18n code=\"oie.verify.webauthn.cant.verify.biometric.authenticator.description1\" bundle=\"login\"}}</p><br>\n      <p>{{i18n code=\"oie.verify.webauthn.cant.verify.biometric.authenticator.description2\" bundle=\"login\"}}</p><br>\n      <h3>{{i18n code=\"oie.verify.webauthn.cant.verify.security.key.title\" bundle=\"login\"}}</h3><br>\n      <p>{{i18n code=\"oie.verify.webauthn.cant.verify.security.key.description\" bundle=\"login\"}}</p><br>\n  `,\n});\n\nconst CantVerifyInfoOVEnrollmentFlowView = View.extend({\n  id: 'help-description-container',\n  className: 'help-description js-help-description',\n  template: hbs`\n      <ol class=\"ov-enrollment-info\">\n        <li>{{i18n code=\"oie.verify.webauthn.cant.verify.enrollment.step1\" bundle=\"login\"}}</li><br>\n        <li>{{i18n code=\"oie.verify.webauthn.cant.verify.enrollment.step2\" bundle=\"login\"}}</li><br>\n        <li>{{i18n code=\"oie.verify.webauthn.cant.verify.enrollment.step3\" bundle=\"login\"}}</li><br>\n        <li>{{i18n code=\"oie.verify.webauthn.cant.verify.enrollment.step4\" bundle=\"login\"}}</><br>\n      </ol>\n  `,\n});\n\nexport default AuthenticatorFooter.extend({\n  links: function() {\n    const links = AuthenticatorFooter.prototype.links.apply(this, arguments);\n\n    const cantVerifyInfoView = this.options.appState.get('app')\n      && this.options.appState.get('app').name === OKTA_AUTHENTICATOR ?\n      CantVerifyInfoOVEnrollmentFlowView: CantVerifyInfoVerifyFlowView;\n    links.unshift({\n      'label': loc('oie.verify.webauthn.cant.verify', 'login'),\n      'name': 'cant-verify',\n      'aria-controls': 'help-description-container',\n      'class': 'link help js-help',\n      'type': 'toggle-text-link',\n      'additionalOptions': {\n        view: cantVerifyInfoView,\n        selector: '.js-help-description',\n      },\n    });\n\n    return links;\n  },\n});\n","import { View } from '@okta/courage';\nimport { FORMS as RemediationForms } from '../../../ion/RemediationConstants';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  className: 'setup-webauthn-residentkey-text',\n  template: hbs `<div>{{{i18n code=\"oie.enroll.webauthn.rk.link\" bundle=\"login\"}}}</div>`,\n  events: {\n    'click .setup-webauthn-residentkey-link': function(e) {\n      e.preventDefault();\n      this.options.appState.trigger('invokeAction', RemediationForms.ENROLL_WEBAUTHN_RESIDENTKEY);\n    },\n  },\n});\n","import { _, loc, createButton, createCallout } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport CryptoUtil from '../../../../util/CryptoUtil';\nimport webauthn from '../../../../util/webauthn';\nimport BrowserFeatures from '../../../../util/BrowserFeatures';\nimport ChallengeWebauthnInfoView from './ChallengeWebauthnInfoView';\nimport { getMessageFromBrowserError } from '../../../ion/i18nTransformer';\nimport ChallengeWebauthnFooter from '../../components/ChallengeWebauthnFooter';\nimport { FORMS as RemediationForms } from '../../../ion/RemediationConstants';\nimport EnrollWebAuthnResidentKeyLinkView from './EnrollWebAuthnResidentkeyLinkView';\n\nconst Body = BaseForm.extend({\n\n  title() {\n    return loc('oie.verify.webauth.title', 'login');\n  },\n\n  className: 'oie-verify-webauthn',\n\n  getUISchema() {\n    const schema = [];\n    // Returning custom array so no input fields are displayed for webauthn\n    if (webauthn.isNewApiAvailable()) {\n      const retryButton = createButton({\n        className: 'retry-webauthn button-primary default-custom-button',\n        title: loc('mfa.challenge.verify', 'login'),\n        click: () => {\n          this.getCredentialsAndSave();\n        }\n      });\n\n      schema.push({\n        View: ChallengeWebauthnInfoView,\n      }, {\n        View: retryButton,\n      });\n      if (this._canSetupWebAuthnResidentKey()) {\n        schema.push({View: EnrollWebAuthnResidentKeyLinkView});\n      }\n    } else {\n      schema.push({\n        View: createCallout({\n          className: 'webauthn-not-supported',\n          type: 'error',\n          subtitle: loc('oie.webauthn.error.not.supported', 'login'),\n        }),\n      });\n    }\n    return schema;\n  },\n\n  remove() {\n    BaseForm.prototype.remove.apply(this, arguments);\n    if (this.webauthnAbortController) {\n      this.webauthnAbortController.abort();\n      this.webauthnAbortController = null;\n    }\n  },\n\n  noButtonBar: true,\n\n  modelEvents: {\n    'error': '_stopVerification'\n  },\n\n  getCredentialsAndSave() {\n    this.clearErrors();\n    this._startVerification();\n    // AbortController is not supported in IE11\n    if (typeof AbortController !== 'undefined') {\n      this.webauthnAbortController = new AbortController();\n    }\n    const relatesToObject = this.options.currentViewState.relatesTo;\n    const authenticatorData = relatesToObject?.value || {};\n    const allowCredentials = [];\n    const authenticatorEnrollments = this.options.appState.get('authenticatorEnrollments')?.value || [];\n    authenticatorEnrollments.forEach((enrollement) => {\n      if (enrollement.key === 'webauthn') {\n        allowCredentials.push({\n          type: 'public-key',\n          id: CryptoUtil.strToBin(enrollement.credentialId),\n        });\n      }\n    });\n    const challengeData = authenticatorData.contextualData.challengeData;\n    const options = _.extend({}, challengeData, {\n      allowCredentials,\n      challenge: CryptoUtil.strToBin(challengeData.challenge),\n    });\n    // navigator.credentials() is not supported in IE11\n    // eslint-disable-next-line compat/compat\n    navigator.credentials.get({\n      publicKey: options,\n      signal: this.webauthnAbortController && this.webauthnAbortController.signal\n    }).then((assertion) => {\n      const credentials = {\n        clientData: CryptoUtil.binToStr(assertion.response.clientDataJSON),\n        authenticatorData: CryptoUtil.binToStr(assertion.response.authenticatorData),\n        signatureData: CryptoUtil.binToStr(assertion.response.signature)\n      };\n      const hasUserHandleSchema = this.options.appState.getSchemaByName('credentials.userHandle');\n      if (hasUserHandleSchema) {\n        _.extend(credentials, {\n          userHandle: CryptoUtil.binToStr(assertion.response.userHandle ?? '')\n        });\n      }\n      \n      this.model.set({\n        credentials\n      });\n      this.saveForm(this.model);\n    }, (error) => {\n      // Do not display if it is abort error triggered by code when switching.\n      // this.webauthnAbortController would be null if abort was triggered by code.\n      if (this.webauthnAbortController) {\n        this.model.trigger('error', this.model, {responseJSON: {errorSummary: getMessageFromBrowserError(error)}});\n      }\n    }).finally(() => {\n      // unset webauthnAbortController on successful authentication or error\n      this.webauthnAbortController = null;\n    });\n  },\n\n  _startVerification: function() {\n    this.$('.okta-waiting-spinner').show();\n    this.$('.retry-webauthn').hide();\n    this.$('.setup-webauthn-residentkey-text').hide();\n    this.$('.retry-webauthn')[0].textContent = loc('retry', 'login');\n  },\n\n  _stopVerification: function() {\n    this.$('.okta-waiting-spinner').hide();\n    this.$('.retry-webauthn').show();\n    this.$('.setup-webauthn-residentkey-text').show();\n  },\n\n  _canSetupWebAuthnResidentKey: function() {\n    return this.options.appState.hasRemediationObject(RemediationForms.ENROLL_WEBAUTHN_RESIDENTKEY);\n  }\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n  Footer: ChallengeWebauthnFooter,\n  postRender() {\n    BaseAuthenticatorView.prototype.postRender.apply(this, arguments);\n    // Trigger browser prompt automatically for other browsers for better UX.\n    if (webauthn.isNewApiAvailable() && !BrowserFeatures.isSafari()) {\n      this.form.getCredentialsAndSave();\n    }\n  },\n});\n","import { loc } from '@okta/courage';\nexport default {\n  title() {\n    return loc('oie.email.mfa.title', 'login');\n  }\n};\n","import { loc, createCallout } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport email from '../shared/email';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport BaseResendView from '../shared/BaseResendView';\nimport BaseFormWithPolling from '../../internals/BaseFormWithPolling';\n\nconst ResendView = BaseResendView.extend(\n  {\n    className: 'hide resend-email-view',\n    events: {\n      'click a.resend-link' : 'handelResendLink'\n    },\n\n    initialize() {\n      this.add(createCallout({\n        content: `${loc('email.code.not.received', 'login')}\n        <a class='resend-link'>${loc('email.button.resend', 'login')}</a>`,\n        type: 'warning',\n      }));\n    },\n\n    handelResendLink() {\n      this.options.appState.trigger('invokeAction', this.options.resendEmailAction);\n      // Hide warning, but reinitiate to show warning again after some threshold of polling\n      if (!this.$el.hasClass('hide')) {\n        this.$el.addClass('hide');\n      }\n      this.showCalloutAfterTimeout();\n    },\n  },\n);\n\nconst Body = BaseFormWithPolling.extend(Object.assign(\n  {\n    save() {\n      return loc('mfa.challenge.verify', 'login');\n    },\n    initialize() {\n      BaseFormWithPolling.prototype.initialize.apply(this, arguments);\n      this.startPolling();\n    },\n\n    postRender() {\n      BaseForm.prototype.postRender.apply(this, arguments);\n\n      // Add 1 instance of resend view\n      if (!this.$el.find('.resend-email-view').length) {\n        this.add(ResendView, {\n          selector: '.o-form-error-container',\n          prepend: true,\n          options: {\n            resendEmailAction: this.resendEmailAction,\n          }\n        });\n      }\n    },\n\n    saveForm() {\n      BaseForm.prototype.saveForm.apply(this, arguments);\n      this.stopPolling();\n    },\n\n    remove() {\n      BaseForm.prototype.remove.apply(this, arguments);\n      this.stopPolling();\n    },\n\n    triggerAfterError(model, error) {\n      BaseForm.prototype.triggerAfterError.apply(this, arguments);\n      const isFormPolling = !!this.polling;\n      this.stopPolling();\n\n      if (error.responseJSON?.errorSummaryKeys?.includes('idx.session.expired')) {\n        // Do NOT resume polling since session is invalid and polling is already stopped\n        return;\n      }\n\n      if (this.isRateLimitError(error)) {\n        // When polling encounter rate limit error, wait 60 sec for rate limit bucket to reset\n        // before polling again & hide error message\n        if (isFormPolling) {\n          setTimeout(() => {\n            model.trigger('clearFormError');\n          }, 0);\n        }\n        this.startPolling(60000);\n      } else {\n        this.startPolling(this.options.appState.get('dynamicRefreshInterval'));\n      }\n    },\n\n    isRateLimitError(error) {\n      return (error.responseJSON?.errorSummaryKeys?.includes('tooManyRequests') // IDX API error\n        || (error.responseJSON?.errorCode === 'E0000047') && !error.responseJSON?.errorIntent); // Standard API error\n    },\n  },\n  email,\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import hbs from '@okta/handlebars-inline-precompile';\nimport { View } from '@okta/courage';\n\n// Courage doesn't support HTML, hence creating a subtitle here.\nconst CheckYourEmailTitle = View.extend({\n  className: 'okta-form-subtitle',\n  attributes: {\n    'data-se': 'o-form-explain',\n  },\n  template: hbs`\n      {{#if email}}\n        {{#if secondaryEmail}}\n          {{i18n\n              code=\"oie.email.verify.alternate.magicLinkToEmailAddress.with.secondary.email\"\n              bundle=\"login\"\n              arguments=\"email;secondaryEmail\"\n              $1=\"<span class='strong no-translate'>$1</span>\"\n              $2=\"<span class='strong no-translate'>$2</span>\"\n          }}\n        {{else}}\n          {{i18n\n              code=\"oie.email.verify.alternate.magicLinkToEmailAddress\"\n              bundle=\"login\"\n              arguments=\"email\"\n              $1=\"<span class='strong no-translate'>$1</span>\"\n          }}\n        {{/if}}\n      {{else}}\n        {{i18n\n          code=\"oie.email.verify.alternate.magicLinkToYourEmail\"\n          bundle=\"login\"\n        }}\n      {{/if}}\n\n      {{#if useEmailMagicLinkValue}}\n        {{i18n\n          code=\"oie.email.verify.alternate.instructions\"\n          bundle=\"login\"\n        }}\n      {{else}}\n        {{i18n\n          code=\"oie.email.verify.alternate.verificationCode.instructions\"\n          bundle=\"login\"\n        }}\n      {{/if}}\n    `,\n\n  getTemplateData() {\n    return this.options;\n  },\n});\n\nconst CheckYourEmailEnrollTitle = View.extend({\n  className: 'okta-form-subtitle',\n  attributes: {\n    'data-se': 'o-form-explain',\n  },\n  template: hbs`\n    {{i18n code=\"oie.email.enroll.subtitle\" bundle=\"login\"}}\n  `,\n});\n\nconst EnterCodeLink = View.extend({\n  template: hbs`\n      <button\n        class=\"button-link enter-auth-code-instead-link\"\n      >\n          {{i18n code=\"oie.email.verify.alternate.show.verificationCode.text\"}}\n      </button>\n    `,\n});\n\nexport function getCheckYourEmailTitle() {\n  return CheckYourEmailTitle;\n}\n\nexport function getCheckYourEmailEnrollTitle() {\n  return CheckYourEmailEnrollTitle;\n}\n\nexport function getEnterCodeLink() {\n  return EnterCodeLink;\n}\n","import BaseAuthenticatorEmailView from './BaseAuthenticatorEmailView';\nimport { getCheckYourEmailTitle, getEnterCodeLink, getCheckYourEmailEnrollTitle } from './AuthenticatorEmailViewUtil';\n\nconst BaseAuthenticatorEmailForm = BaseAuthenticatorEmailView.prototype.Body;\n\nconst Body = BaseAuthenticatorEmailForm.extend(\n  Object.assign({\n    resendEmailAction: 'currentAuthenticator-resend',\n\n    initialize() {\n      BaseAuthenticatorEmailForm.prototype.initialize.apply(this, arguments);\n\n      const email = this.options.appState.get('user')?.identifier || {};\n\n      const useEmailMagicLinkValue = this.isUseEmailMagicLink();\n\n      if (useEmailMagicLinkValue !== undefined) {\n        \n        this.noButtonBar = true;\n        this.events['click .enter-auth-code-instead-link'] = 'showAuthCodeEntry';\n\n        if (useEmailMagicLinkValue) {\n          this.add(getEnterCodeLink(), {\n            prepend: true,\n            selector: '.o-form-error-container',\n          });\n        } \n  \n        this.add(getCheckYourEmailTitle(), {\n          prepend: true,\n          selector: '.o-form-error-container',\n          options: { email, useEmailMagicLinkValue },\n        });\n      } else {\n        this.add(getCheckYourEmailEnrollTitle(), {\n          prepend: true,\n          selector: '.o-form-error-container',\n        });\n      }\n    },\n\n    postRender() {\n      BaseAuthenticatorEmailForm.prototype.postRender.apply(this, arguments);\n      if (this.isUseEmailMagicLink() !== undefined) {\n        if (this.isUseEmailMagicLink()) {\n          this.showCodeEntryField(false);\n        } else {\n          this.noButtonBar = false;\n        }\n      }\n    },\n\n    isUseEmailMagicLink() {\n      return this.options.appState.get('currentAuthenticator')?.\n        contextualData?.useEmailMagicLink;\n    },\n\n    showAuthCodeEntry() {\n      this.noButtonBar = false;\n      this.render();\n\n      this.showCodeEntryField(true);\n      this.removeEnterAuthCodeInsteadLink();\n    },\n\n    showCodeEntryField(show = true) {\n      const $textField = this.$el.find('.o-form-fieldset-container');\n      $textField.toggle(show);\n    },\n\n    removeEnterAuthCodeInsteadLink() {\n      this.$el.find('.enter-auth-code-instead-link').remove();\n    },\n  })\n);\n\nexport default BaseAuthenticatorEmailView.extend({\n  Body,\n});\n","import BaseAuthenticatorEmailView from './BaseAuthenticatorEmailView';\nimport { getCheckYourEmailTitle, getEnterCodeLink } from './AuthenticatorEmailViewUtil';\n\nconst BaseAuthenticatorEmailForm = BaseAuthenticatorEmailView.prototype.Body;\n\nconst Body = BaseAuthenticatorEmailForm.extend(\n  Object.assign({\n    noButtonBar: true,\n    resendEmailAction: 'currentAuthenticatorEnrollment-resend',\n\n    events: {\n      'click .enter-auth-code-instead-link': 'showAuthCodeEntry',\n    },\n\n    initialize() {\n      BaseAuthenticatorEmailForm.prototype.initialize.apply(this, arguments);\n\n      const { email, secondaryEmail } =\n        this.options.currentViewState.relatesTo?.value?.profile || {};\n\n      const useEmailMagicLinkValue = this.isUseEmailMagicLink();\n\n      if (useEmailMagicLinkValue) {\n        this.add(getEnterCodeLink(), {\n          prepend: true,\n          selector: '.o-form-error-container',\n        });\n      }\n\n      this.add(getCheckYourEmailTitle(), {\n        prepend: true,\n        selector: '.o-form-error-container',\n        options: { email, secondaryEmail, useEmailMagicLinkValue },\n      });\n    },\n\n    postRender() {\n      BaseAuthenticatorEmailForm.prototype.postRender.apply(this, arguments);\n      if (this.isUseEmailMagicLink()) {\n        this.showCodeEntryField(false);\n      } else {\n        this.noButtonBar = false;\n      }\n    },\n\n    isUseEmailMagicLink() {\n      const useEmailMagicLink = this.options.appState.get('currentAuthenticatorEnrollment')?.\n        contextualData?.useEmailMagicLink;\n      return useEmailMagicLink !== undefined ? useEmailMagicLink : true;\n    },\n\n    showAuthCodeEntry() {\n      this.noButtonBar = false;\n      this.render();\n\n      this.showCodeEntryField(true);\n      this.removeEnterAuthCodeInsteadLink();\n    },\n\n    showCodeEntryField(show = true) {\n      const $textField = this.$el.find('.o-form-fieldset-container');\n      $textField.toggle(show);\n    },\n\n    removeEnterAuthCodeInsteadLink() {\n      this.$el.find('.enter-auth-code-instead-link').remove();\n    },\n  })\n);\n\nexport default BaseAuthenticatorEmailView.extend({\n  Body,\n});\n","import { loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst BaseAuthenticatorEmailForm = BaseAuthenticatorView.prototype.Body;\n\nconst SubtitleView = View.extend({\n  template: hbs`\n    <div class=\"okta-form-subtitle\" data-se=\"o-form-explain\">\n      {{#if email}}\n        {{#if secondaryEmail}}\n          {{i18n\n            code=\"oie.email.verify.subtitle.text.with.email.and.secondary.email\"\n            bundle=\"login\"\n            arguments=\"email;secondaryEmail\"\n            $1=\"<span class='strong no-translate'>$1</span>\"\n            $2=\"<span class='strong no-translate'>$2</span>\"\n          }}\n        {{else}}\n          {{i18n\n            code=\"oie.email.verify.subtitle.text.with.email\"\n            bundle=\"login\"\n            arguments=\"email\"\n            $1=\"<span class='strong no-translate'>$1</span>\"\n          }}\n        {{/if}}\n      {{else}}\n        {{i18n\n          code=\"oie.email.verify.subtitle.text.without.email\"\n          bundle=\"login\"\n        }}\n      {{/if}}\n    </div>\n  `,\n\n  getTemplateData() {\n    const email = this.options.appState.get('currentAuthenticatorEnrollment')?.profile?.email;\n    const secondaryEmail = this.options.appState.get('currentAuthenticatorEnrollment')?.profile?.secondaryEmail;\n    return {\n      email,\n      secondaryEmail\n    };\n  },\n});\n\nconst Body = BaseAuthenticatorEmailForm.extend(\n  {\n    title() {\n      return loc('oie.email.challenge.mfa.title', 'login');\n    },\n\n    save() {\n      return loc('oie.email.verify.primaryButton', 'login');\n    },\n\n    postRender() {\n      BaseAuthenticatorEmailForm.prototype.postRender.apply(this, arguments);\n      this.add(SubtitleView, {\n        prepend: true,\n        selector: '.o-form-info-container',\n      });\n    },\n\n    getUISchema() {\n      // Prevent from displaying radio buttons on the UI\n      const uiSchemas = BaseAuthenticatorEmailForm.prototype.getUISchema.apply(this, arguments);\n      return uiSchemas.filter(schema => schema.name !== 'authenticator.methodType');\n    },\n  },\n);\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { createCallout } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport BaseResendView from '../shared/BaseResendView';\n\nexport default BaseResendView.extend({\n  //only show after certain threshold of polling\n  className: 'hide resend-ov-link-view',\n  events: {\n    'click a.resend-link' : 'handelResendLink'\n  },\n\n  initialize() {\n    const selectedChannel = this.options.appState.get('currentAuthenticator').contextualData.selectedChannel;\n    this.add(createCallout({\n      content: selectedChannel === 'email' ?\n        hbs `{{{i18n code=\"oie.enroll.okta_verify.email.notReceived\" bundle=\"login\"}}}`:\n        hbs `{{{i18n code=\"oie.enroll.okta_verify.sms.notReceived\" bundle=\"login\"}}}`,\n      type: 'warning',\n    }));\n  },\n\n  handelResendLink() {\n    this.options.appState.trigger('invokeAction', 'currentAuthenticator-resend');\n    //hide warning, but reinitiate to show warning again after some threshold of polling\n    this.$el.addClass('hide');\n    this.showCalloutAfterTimeout();\n  },\n});\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { FORMS as RemediationForms } from '../../../ion/RemediationConstants';\n\nexport default View.extend({\n  className: 'switch-channel-text',\n  template: hbs `\n    {{#if isQRcodeChannel}}\n      <a href=\"#\" class=\"switch-channel-link\" aria-label=\"{{i18n code=\"enroll.totp.aria.cannotScan\" bundle=\"login\" }}\">\n        {{i18n code=\"enroll.totp.cannotScan\" bundle=\"login\"}}</a>\n    {{else if isSameDeviceChannel}}\n    {{else if isDeviceBootstrapChannel}}\n    {{else}}\n      {{{i18n code=\"oie.enroll.okta_verify.switch.channel.link.text\" bundle=\"login\"}}}\n    {{/if}}`,\n  getTemplateData() {\n    const selectedChannel = this.options.appState.get('currentAuthenticator').contextualData.selectedChannel;\n    return {\n      isQRcodeChannel: selectedChannel === 'qrcode',\n      // Do not show switch channel link for sameDevice or deviceBootstrap\n      isSameDeviceChannel: selectedChannel === 'samedevice',\n      isDeviceBootstrapChannel: selectedChannel === 'devicebootstrap',\n    };\n  },\n  postRender() {\n    this.$el.find('.switch-channel-link').on('click', (event) => {\n      const appState = this.options.appState;\n      event.preventDefault();\n      appState.trigger('switchForm', RemediationForms.SELECT_ENROLLMENT_CHANNEL);\n    });\n  },\n});\n","import { View, _, loc, internal} from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst { Notification } = internal.views.components;\nconst { Clipboard } = internal.util;\n\nexport default View.extend({\n  template: hbs`\n      {{#if href}}\n        <ol class=\"qrcode-info ov-info\">\n          <li>{{i18n code=\"oie.enroll.okta_verify.qrcode.step1\" bundle=\"login\"}}</li>\n          <li>{{i18n code=\"oie.enroll.okta_verify.qrcode.step2\" bundle=\"login\"}}</li>\n          <li>{{i18n code=\"oie.enroll.okta_verify.qrcode.step3\" bundle=\"login\"}}</li>\n        </ol>\n        <div class=\"qrcode-container\">\n          <img class=\"qrcode\" src={{href}} alt=\"{{i18n code=\"mfa.altQrCode\" bundle=\"login\" }}\"></img>\n        </div>\n      {{/if}}\n      {{#if email}}\n        <ul class=\"email-info ov-info\">\n          <li>{{{i18n code=\"oie.enroll.okta_verify.email.info\" bundle=\"login\" arguments=\"email\"}}}</li>\n          <li class=\"switch-channel-content\"></li>\n        </ul>\n      {{/if}}\n      {{#if phoneNumber}}\n        <ul class=\"sms-info ov-info\">\n          <li>{{{i18n code=\"oie.enroll.okta_verify.sms.info\" bundle=\"login\" arguments=\"phoneNumber\"}}}</li>\n          <li class=\"switch-channel-content\"></li>\n        </ul>\n      {{/if}}\n      {{#if sameDevice}}\n        <p class=\"explanation\" data-se=\"subheader\">\n          {{i18n code=\"oie.enroll.okta_verify.setup.subtitle \" bundle=\"login\"}}\n        </p>\n        <ol class=\"sameDevice-info ov-info\">\n          <li>\n            {{{i18n code=\"enroll.oda.without.account.step1\" bundle=\"login\" arguments=\"sameDevice.downloadHref\"}}}\n          </li>\n          <li>{{i18n code=\"oie.enroll.okta_verify.setup.openOv\" bundle=\"login\"}}</li>          \n          <li>\n              {{i18n code=\"oie.enroll.okta_verify.setup.signInUrl\" bundle=\"login\"}}\n              <br><br/>\n              <span class='semi-strong'>{{sameDevice.orgUrl}}</span>\n              <a data-clipboard-text=\"{{sameDevice.orgUrl}}\" class=\"button link-button copy-org-clipboard-button\">\n                {{i18n code=\"enroll.oda.org.copyLink\" bundle=\"login\"}}\n              </a>\n          </li>\n          <li>{{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.followInstruction\" bundle=\"login\"}}</li>\n        </ol>\n        <p class=\"closing\">\n          {{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.canBeClosed\" bundle=\"login\"}}\n        </p>\n      {{/if}}\n      {{#if deviceBootstrap}}\n        <p class=\"explanation\" data-se=\"subheader\">\n          {{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.subtitle\" bundle=\"login\"}}\n        </p>\n        <ol class=\"deviceBootstrap-info ov-info\">\n          <li>\n            {{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.openOv.suchAs\"\n            bundle=\"login\"\n            arguments=\"enrolledDeviceName\"\n            $1=\"<span class='semi-strong'>$1</span>\"}}\n          </li>          \n          <li>{{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.selectAccount\" bundle=\"login\"}}</li>\n          <li>\n            {{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.addAccount\"\n            bundle=\"login\" $1=\"<span class='semi-strong'>$1</span>\"}}\n          </li>\n          <li>{{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.followInstruction\" bundle=\"login\"}}</li>\n        </ol>\n        <p class=\"closing\">\n          {{i18n code=\"oie.enroll.okta_verify.setup.skipAuth.canBeClosed\" bundle=\"login\"}}\n        </p>\n      {{/if}}\n    `,\n  getTemplateData() {\n    const contextualData = this.options.appState.get('currentAuthenticator').contextualData;\n    let enrolledDeviceName = '';\n    if (contextualData && contextualData?.devicebootstrap && contextualData?.devicebootstrap.enrolledDevices) {\n      const enrolledDevices = contextualData?.devicebootstrap.enrolledDevices;\n      enrolledDeviceName = Array.isArray(enrolledDevices) && !_.isEmpty(enrolledDevices) ?\n        enrolledDevices[0] : enrolledDevices;\n    }\n\n    return {\n      href: contextualData.qrcode?.href,\n      email: _.escape(contextualData?.email),\n      phoneNumber:  _.escape(contextualData?.phoneNumber),\n      sameDevice: contextualData?.samedevice,\n      deviceBootstrap: contextualData?.devicebootstrap,\n      enrolledDeviceName: enrolledDeviceName,\n    };\n  },\n  postRender: function() {\n    Clipboard.attach('.copy-org-clipboard-button').done(() => {\n      let notification = new Notification({\n        message: loc('enroll.oda.org.copyLink.success', 'login'),\n        level: 'success',\n      });\n      this.el.prepend(notification.render().el);\n      return false;\n    });\n  },\n});","import { loc } from '@okta/courage';\nimport { BaseFormWithPolling } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport polling from '../shared/polling';\nimport OVResendView from './OVResendView';\nimport SwitchEnrollChannelLinkView from './SwitchEnrollChannelLinkView';\nimport EnrollChannelPollDescriptionView from './EnrollChannelPollDescriptionView';\n\nconst OV_FORCE_FIPS_COMPLIANCE_UPGRAGE_KEY_IOS =\n  'oie.authenticator.app.non_fips_compliant_enrollment_device_incompatible';\nconst OV_FORCE_FIPS_COMPLIANCE_UPGRAGE_KEY_NON_IOS =\n  'oie.authenticator.app.non_fips_compliant_enrollment_app_update_required';\nconst OV_QR_ENROLL_ENABLE_BIOMETRICS_KEY = 'oie.authenticator.app.method.push.enroll.enable.biometrics';\nlet shouldStartPolling = true;\n\nconst Body = BaseFormWithPolling.extend(Object.assign(\n  {\n    title() {\n      const selectedChannel = this.options.appState.get('currentAuthenticator').contextualData.selectedChannel;\n      let title;\n      switch (selectedChannel) {\n      case 'email':\n        title = loc('oie.enroll.okta_verify.setup.email.title', 'login');\n        break;\n      case 'sms':\n        title = loc('oie.enroll.okta_verify.setup.sms.title', 'login');\n        break;\n      default:\n        title = loc('oie.enroll.okta_verify.setup.title', 'login');\n      }\n      return title;\n    },\n    className: 'oie-enroll-ov-poll',\n    noButtonBar: true,\n    initialize() {\n      BaseFormWithPolling.prototype.initialize.apply(this, arguments);\n      this.listenTo(this.model, 'error', this.stopPolling);\n      if (shouldStartPolling) {\n        this.startPolling();\n      }\n    },\n    showMessages() {\n      // override showMessages to display custom callout\n      const calloutOptions = {};\n      if (this.options.appState.containsMessageWithI18nKey(OV_FORCE_FIPS_COMPLIANCE_UPGRAGE_KEY_IOS) ||\n        this.options.appState.containsMessageWithI18nKey(OV_FORCE_FIPS_COMPLIANCE_UPGRAGE_KEY_NON_IOS)) {\n        // add a title for ov force upgrade\n        calloutOptions.title = loc('oie.okta_verify.enroll.force.upgrade.title', 'login');\n      } else if (this.options.appState.containsMessageWithI18nKey(OV_QR_ENROLL_ENABLE_BIOMETRICS_KEY)) {\n        // add a title for OV enable biometrics message during enrollment\n        calloutOptions.title = loc('oie.authenticator.app.method.push.enroll.enable.biometrics.title', 'login');\n      }\n      BaseFormWithPolling.prototype.showMessages.call(this, calloutOptions);\n    },\n    getUISchema() {\n      const schema = [];\n      const contextualData = this.options.appState.get('currentAuthenticator').contextualData;\n      const selectedChannel = contextualData.selectedChannel;\n      let selector;\n      if (selectedChannel === 'qrcode') {\n        selector = '.qrcode-container';\n        shouldStartPolling = true;\n      } else if (['email', 'sms'].includes(selectedChannel)) {\n        selector = '.switch-channel-content';\n        shouldStartPolling = true;\n      } else if (['samedevice', 'devicebootstrap'].includes(selectedChannel)) { \n        // no selector if the channel is same device or device bootstrap\n        // additionally, stop polling as it should be a terminal page\n        shouldStartPolling = false;\n      }\n      \n      schema.push({\n        View: EnrollChannelPollDescriptionView,\n      });\n      schema.push({\n        View: SwitchEnrollChannelLinkView,\n        options: {\n          selectedChannel\n        },\n        selector: selector,\n      });\n      if (['email', 'sms'].includes(selectedChannel)) {\n        schema.push({\n          View: OVResendView,\n          selector: '.o-form-error-container',\n        });\n      }\n      return schema;\n    },\n    remove() {\n      BaseFormWithPolling.prototype.remove.apply(this, arguments);\n      this.stopPolling();\n    },\n  },\n\n  polling,\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc, _ } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport BrowserFeatures from '../../../../util/BrowserFeatures';\n\nconst Body = BaseForm.extend({\n  title() {\n    return (BrowserFeatures.isAndroid() || BrowserFeatures.isIOS())\n      ? loc('oie.enroll.okta_verify.setup.title', 'login')\n      : loc('oie.enroll.okta_verify.select.channel.title', 'login');\n  },\n  getUISchema() {\n    const schemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    // filter selected channel\n    const channelField = _.find(schemas, (schema) => schema.name === 'authenticator.channel');\n    channelField.options = _.filter(channelField?.options, (option) =>\n      option.value !== this.options.appState.get('currentAuthenticator')?.contextualData?.selectedChannel);\n    channelField.value = channelField.options[0]?.value;\n    channelField.sublabel = null;\n    this.model.set('authenticator.channel', channelField.value);\n    const description = {\n      View: loc('oie.enroll.okta_verify.select.channel.description', 'login'),\n      selector: '.o-form-fieldset-container',\n    };\n    return [description, ...schemas];\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc, _, Model } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport CountryUtil from '../../../../util/CountryUtil';\nimport SwitchEnrollChannelLinkView from './SwitchEnrollChannelLinkView';\n\nconst Body = BaseForm.extend({\n  className: 'oie-enroll-ov-data',\n  title() {\n    return this.options.appState.get('currentAuthenticator').contextualData.selectedChannel === 'email' ?\n      loc('oie.enroll.okta_verify.enroll.channel.email.title', 'login'):\n      loc('oie.enroll.okta_verify.enroll.channel.sms.title', 'login');\n  },\n\n  save() {\n    return loc('oie.enroll.okta_verify.setupLink', 'login');\n  },\n\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    const phoneNumberUISchema = _.find(uiSchemas, ({ name }) => name === 'phoneNumber');\n    const phoneNumberUISchemaIndex = _.findIndex(uiSchemas, ({ name }) => name === 'phoneNumber');\n\n    const countryUISchema = {\n      'label-top': true,\n      label: loc('country.label', 'login'),\n      type: 'select',\n      options: CountryUtil.getCountries(),\n      name: 'country',\n      wide: true,\n    };\n\n    // Create an input group - serves as a display wrapper\n    const phoneNumberWithCodeUISchema = {\n      label: loc('mfa.phoneNumber.placeholder', 'login'),\n      type: 'group',\n      modelType: 'string',\n      'label-top': true,\n      name: 'phoneCode',\n      input: [\n        {\n          type: 'label',\n          /* eslint-disable-next-line @okta/okta/no-unlocalized-text */\n          label: `+${this.model.get('phoneCode')}`,\n          className: 'country-code-label no-translate',\n        },\n        Object.assign({}, phoneNumberUISchema),\n      ],\n    };\n\n    if (phoneNumberUISchemaIndex !== -1) {\n      // Replace phoneNumberUISchema and add countryUISchema before phone.\n      uiSchemas.splice(phoneNumberUISchemaIndex, 1, countryUISchema, phoneNumberWithCodeUISchema);\n    }\n\n    const description = {\n      View: this.options.appState.get('currentAuthenticator').contextualData.selectedChannel === 'email' ?\n        loc('oie.enroll.okta_verify.channel.email.description', 'login'):\n        loc('oie.enroll.okta_verify.channel.sms.description', 'login'),\n      selector: '.o-form-fieldset-container',\n    };\n\n    uiSchemas.push(description);\n    return uiSchemas;\n  },\n\n  handlePhoneCodeChange() {\n    const countryCodeField = this.el.querySelector('.country-code-label');\n    countryCodeField.innerText = `+${this.model.get('phoneCode')}`;\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    if (this.options.appState.get('currentAuthenticator').contextualData.selectedChannel === 'sms') {\n      this.listenTo(this.model, 'change:phoneCode', this.handlePhoneCodeChange.bind(this));\n    }\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n  createModelClass() {\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n    if (this.options.appState.get('currentAuthenticator').contextualData.selectedChannel !== 'sms') {\n      return ModelClass;\n    }\n    const local = Object.assign(\n      {\n        country: {\n          // Set default country to \"US\"\n          'value': this.settings.get('defaultCountryCode'),\n          'type': 'string',\n        },\n      },\n      ModelClass.prototype.local,\n    );\n    const derived = Object.assign(\n      {\n        phoneCode: {\n          deps: [ 'country'],\n          fn: function(country) {\n            return CountryUtil.getCallingCodeForCountry(country);\n          },\n        },\n      },\n      ModelClass.prototype.derived,\n    );\n    return ModelClass.extend({\n      local,\n      derived,\n      toJSON: function() {\n        const modelJSON = Model.prototype.toJSON.call(this, arguments);\n        const phoneCode = this.get('phoneCode');\n\n        // Add country code..\n        let formattedPhoneNumber = `+${phoneCode}${modelJSON.phoneNumber}`;\n\n        // Override phone with formatted number..\n        modelJSON.phoneNumber = formattedPhoneNumber;\n        return modelJSON;\n      },\n    });\n  },\n  postRender() {\n    this.add(SwitchEnrollChannelLinkView, 'form');\n  },\n});\n","// Common view for OV push and custom push.\nimport { loc, createButton, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { BaseFormWithPolling } from '../../internals';\nimport polling from '../shared/polling';\nimport { WARNING_TIMEOUT } from '../../utils/Constants';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport { AUTHENTICATOR_KEY } from '../../../ion/RemediationConstants';\n\nconst warningTemplate = View.extend({\n  className: 'okta-form-infobox-warning infobox infobox-warning',\n  template: hbs`\n    <span class=\"icon warning-16\"></span>\n    <p>{{warning}}</p>\n  `\n});\nconst Body = BaseFormWithPolling.extend(Object.assign(\n  {\n    noButtonBar: true,\n\n    title() {\n      return this.isOV() ? loc('oie.okta_verify.push.title', 'login') :\n        loc('oie.verify.custom_app.title', 'login', [this.options.appState.getAuthenticatorDisplayName()]);\n    },\n\n    initialize() {\n      BaseFormWithPolling.prototype.initialize.apply(this, arguments);\n      // 'hasSavingState' would be true by default.\n      // Setting it to false when auth key is okta_verify or custom_app with autochallenge schema\n      // So that 'o-form-saving' css class is not added while polling and checkbox remains enabled.\n      if ((this.isOV() || this.isCustomApp()) && this.isAutoChallengeSupported()) {\n        this.hasSavingState = false;\n      }\n      this.listenTo(this.model, 'error', this.stopPoll);\n      this.addView();\n    },\n\n    addView() {\n      this.add(createButton({\n        className: 'button button-wide button-primary send-push link-button-disabled',\n        title: this.isOV() ? loc('oie.okta_verify.push.sent', 'login') : loc('oie.custom_app.push.sent', 'login'),\n        click: (e) => {\n          e.preventDefault();\n        }\n      }));\n      this.add(\n        `<span class='accessibility-text' role='alert'>\n        ${this.isOV() ? loc('oie.okta_verify.push.sent', 'login') : loc('oie.custom_app.push.sent', 'login')}</span>`,\n      );\n    },\n\n    render() {\n      BaseFormWithPolling.prototype.render.apply(this, arguments);\n\n      const checkbox = this.$el.find('[data-se=\"o-form-fieldset-autoChallenge\"]');\n\n      if (!this.isAutoChallengeSupported()) {\n        checkbox.length && checkbox.hide();\n      } else if (this.isOV() || this.isCustomApp()) {\n        // Move checkbox below the button\n        // Checkbox is rendered by BaseForm using remediation response and\n        // hence by default always gets added above buttons.\n        checkbox.length && this.$el.find('.o-form-fieldset-container').append(checkbox);\n      }\n    },\n\n    postRender() {\n      BaseFormWithPolling.prototype.postRender.apply(this, arguments);\n\n      const className = this.isOV() ?\n        'okta-verify-push-challenge' : ' custom-app-push-challenge';\n      this.$el.addClass(className);\n      this.startPoll();\n    },\n\n    startPoll() {\n      this.startPolling();\n      this.warningTimeout = setTimeout(() => {\n        const warningText = this.isOV() ? loc('oktaverify.warning', 'login') :\n          loc('oie.custom_app.push.warning', 'login', [this.options.appState.getAuthenticatorDisplayName()]);\n        this.showWarning(warningText);\n      }, WARNING_TIMEOUT);\n    },\n\n    stopPoll() {\n      this.stopPolling();\n      this.clearWarning();\n    },\n\n    showWarning(msg) {\n      this.clearWarning();\n      this.add(warningTemplate, '.o-form-error-container', {options: {warning: msg}});\n    },\n\n    clearWarning() {\n      if (this.$('.o-form-error-container div').hasClass('okta-form-infobox-warning')) {\n        this.$('.okta-form-infobox-warning').remove();\n      }\n      clearTimeout(this.warningTimeout);\n    },\n\n    remove() {\n      BaseFormWithPolling.prototype.remove.apply(this, arguments);\n      this.stopPolling();\n    },\n\n    isOV() {\n      return this.options.appState.get('authenticatorKey') === AUTHENTICATOR_KEY.OV;\n    },\n\n    isCustomApp() {\n      return this.options.appState.get('authenticatorKey') === AUTHENTICATOR_KEY.CUSTOM_APP;\n    },\n\n    isAutoChallengeSupported() {\n      return (this.options.appState.getSchemaByName('autoChallenge') !== null &&\n        this.options.appState.getSchemaByName('autoChallenge') !== undefined);\n    }\n  },\n\n  polling,\n));\n\nconst AuthenticatorView = BaseAuthenticatorView.extend({\n  Body,\n});\n\nexport {\n  AuthenticatorView as default,\n  Body,\n};\n","import { _, createCallout } from '@okta/courage';\nimport { BaseOktaVerifyChallengeView } from '../../internals';\nimport { getBiometricsErrorOptions } from '../../utils/ChallengeViewUtil';\n\nconst Body = BaseOktaVerifyChallengeView.extend({\n  getDeviceChallengePayload() {\n    return this.options.currentViewState.relatesTo.value.contextualData.challenge.value;\n  },\n\n  showCustomFormErrorCallout(error) {\n    const options = getBiometricsErrorOptions(error, false);\n    \n    // If not biometrics error, just show the returned error message\n    if (_.isEmpty(options)) {\n      return false;\n    }\n\n    this.showMessages(createCallout(options));\n    return true;\n  },\n});\n\nexport default Body;\n","import { _, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { WARNING_TIMEOUT } from '../../utils/Constants';\n\nconst ResendNumberChallengeView = View.extend({\n  initialize() {\n    this.listenTo(this.options.appState, 'showNumberChallengeWarning',  () => {\n      this.startWarningTimeout();\n    });\n\n    this.listenTo(this.options.appState, 'hideNumberChallengeWarning', () => {\n      this.clearWarning();\n    });\n  },\n  className: 'resend-number-challenge-warning hide',\n  template: hbs`\n      <div class=\"okta-form-infobox-warning infobox infobox-warning\">\n        <span class=\"icon warning-16\"></span>\n        <p>{{i18n\n          code=\"oie.numberchallenge.warning\"\n          bundle=\"login\"\n          $1=\"<a href='#' class='resend-number-challenge'>$1</a>\"}}\n        </p>\n      </div>\n  `,\n  showWarning() {\n    this.$el.removeClass('hide');\n  },\n  clearWarning() {\n    this.$el.addClass('hide');\n    clearTimeout(this.warningTimeout);\n    this.startWarningTimeout();\n  },\n  startWarningTimeout() {\n    this.warningTimeout = setTimeout(_.bind(function() {\n      this.showWarning();\n    }, this), WARNING_TIMEOUT);\n  }\n});\n\nexport default ResendNumberChallengeView;\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nconst NumberChallengePhoneView = View.extend({\n  className: 'number-challenge-section',\n  template: hbs`\n     <p>\n     {{i18n\n      code=\"oie.numberchallenge.instruction\"\n      bundle=\"login\"\n      arguments=\"correctAnswer\"\n      $1=\"<span class='strong'>$1</span>\"}}\n     </p>\n    <div class=\"phone no-translate\">\n      <div class=\"phone--body\">\n        <div class=\"phone--screen\">\n          <span class=\"phone--number\" data-se=\"challenge-number\">{{correctAnswer}}</span>\n        </div>\n        <div class=\"phone--home-button\"></div>\n      </div>\n    </div>\n  `,\n  getTemplateData() {\n    const correctAnswer = this.options.appState.get('currentAuthenticator')?.contextualData?.correctAnswer;\n    return {\n      correctAnswer\n    };\n  },\n});\n\n\nexport default NumberChallengePhoneView;\n","import { loc } from '@okta/courage';\nimport { BaseFormWithPolling } from '../../internals';\nimport polling from '../shared/polling';\nimport ResendNumberChallengeView from './ResendNumberChallengeView';\nimport NumberChallengePhoneView from './NumberChallengePhoneView';\n\nconst Body = BaseFormWithPolling.extend(Object.assign(\n  {\n    noButtonBar: true,\n\n    className: 'okta-verify-number-challenge',\n\n    events: {\n      'click a.resend-number-challenge': 'handleResendNumberChallenge'\n    },\n\n    handleResendNumberChallenge() {\n      this.options.appState.trigger('invokeAction', 'currentAuthenticator-resend');\n      // hide the warning\n      this.options.appState.trigger('hideNumberChallengeWarning');\n    },\n\n    title() {\n      return loc('oie.okta_verify.push.sent', 'login');\n    },\n\n    initialize() {\n      BaseFormWithPolling.prototype.initialize.apply(this, arguments);\n      this.add(NumberChallengePhoneView);\n    },\n\n    triggerAfterError() {\n      BaseFormWithPolling.prototype.triggerAfterError.apply(this, arguments);\n      this.stopPolling();\n      this.$el.find('.o-form-fieldset-container').empty();\n    },\n\n    postRender() {\n      BaseFormWithPolling.prototype.postRender.apply(this, arguments);\n      this.startPoll();\n    },\n\n    startPoll() {\n      this.startPolling();\n      this.addWarning();\n    },\n\n    stopPoll() {\n      this.stopPolling();\n    },\n\n    addWarning() {\n      this.add(ResendNumberChallengeView, '.o-form-error-container');\n      this.options.appState.trigger('showNumberChallengeWarning');\n    },\n\n    remove() {\n      BaseFormWithPolling.prototype.remove.apply(this, arguments);\n      this.stopPolling();\n    },\n  },\n\n  polling,\n));\n\nexport default Body;\n","import BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport { Body as ChallengePushViewBody } from '../shared/ChallengePushView';\nimport ChallengeOktaVerifyFastPassView from './ChallengeOktaVerifyFastPassView';\nimport NumberChallengePushView from './NumberChallengePushView';\nimport { AUTHENTICATOR_METHODS } from '../../../ion/RemediationConstants';\n\nexport default BaseAuthenticatorView.extend({\n  initialize() {\n    BaseAuthenticatorView.prototype.initialize.apply(this, arguments);\n    const currentAuthenticator = this.options?.appState?.get('currentAuthenticator');\n    const selectedMethod = currentAuthenticator?.methods[0];\n    if (selectedMethod?.type === AUTHENTICATOR_METHODS.PUSH &&\n      currentAuthenticator?.contextualData?.correctAnswer) {\n      this.Body = NumberChallengePushView;\n    } else if (selectedMethod?.type === AUTHENTICATOR_METHODS.PUSH) {\n      this.Body = ChallengePushViewBody;\n    } else {\n      this.Body = ChallengeOktaVerifyFastPassView;\n    }\n  },\n});\n","import { loc, createCallout } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst OV_UV_ENABLE_BIOMETRIC_SERVER_KEY = 'oie.authenticator.oktaverify.method.totp.verify.enable.biometrics';\n\nconst Body = BaseForm.extend(Object.assign(\n  {\n    className: 'okta-verify-totp-challenge',\n\n    title() {\n      return loc('oie.okta_verify.totp.title', 'login');\n    },\n\n    save() {\n      return loc('mfa.challenge.verify', 'login');\n    },\n\n    showCustomFormErrorCallout(error) {\n      const errorSummaryKeys = error?.responseJSON?.errorSummaryKeys;\n      let options;\n      if (errorSummaryKeys && errorSummaryKeys.includes(OV_UV_ENABLE_BIOMETRIC_SERVER_KEY)) {\n        options = {\n          type: 'error',\n          className: 'okta-verify-uv-callout-content',\n          title: loc('oie.authenticator.app.method.push.verify.enable.biometrics.title', 'login'),\n          subtitle: loc('oie.authenticator.app.method.push.verify.enable.biometrics.description', 'login'),\n          bullets: [\n            loc('oie.authenticator.app.method.push.verify.enable.biometrics.point1', 'login'),\n            loc('oie.authenticator.app.method.push.verify.enable.biometrics.point2', 'login'),\n            loc('oie.authenticator.app.method.push.verify.enable.biometrics.point3', 'login')\n          ],\n        };\n        this.showMessages(createCallout(options));\n        return true;\n      }\n    },\n  },\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc, createCallout } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst OV_NMC_FORCE_UPGRAGE_SERVER_KEY = 'oie.authenticator.app.method.push.force.upgrade.number_challenge';\nconst OV_UV_ENABLE_BIOMETRIC_SERVER_KEY = 'oie.authenticator.app.method.push.verify.enable.biometrics';\n\nconst Body = BaseForm.extend(Object.assign(\n  {\n    className: 'okta-verify-resend-push',\n\n    title() {\n      return loc('oie.okta_verify.push.title', 'login');\n    },\n\n    save() {\n      return loc('oie.okta_verify.push.resend', 'login');\n    },\n\n    showMessages() {\n      let options = {};\n      if (this.options.appState.containsMessageWithI18nKey(OV_NMC_FORCE_UPGRAGE_SERVER_KEY)) {\n        // add a title for OV force upgrade\n        options.title = loc('oie.numberchallenge.force.upgrade.title', 'login');\n      } else if (this.options.appState.containsMessageWithI18nKey(OV_UV_ENABLE_BIOMETRIC_SERVER_KEY)) {\n        // add a title for OV enable biometrics message during verification\n        options.content = null;\n        options.className = 'okta-verify-uv-callout-content';\n        options.title = loc('oie.authenticator.app.method.push.verify.enable.biometrics.title', 'login');\n        options.subtitle = loc('oie.authenticator.app.method.push.verify.enable.biometrics.description', 'login');\n        options.type = 'error';\n        options.bullets = [\n          loc('oie.authenticator.app.method.push.verify.enable.biometrics.point1', 'login'),\n          loc('oie.authenticator.app.method.push.verify.enable.biometrics.point2', 'login'),\n          loc('oie.authenticator.app.method.push.verify.enable.biometrics.point3', 'login')\n        ];\n        options = createCallout(options);\n      }\n      BaseForm.prototype.showMessages.call(this, options);\n    },\n  },\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","// Common view for OV push and custom app.\nimport { BaseForm } from '../../internals';\nimport {AUTHENTICATOR_KEY} from 'v2/ion/RemediationConstants';\nimport { loc } from '@okta/courage';\n\n\nconst Body = BaseForm.extend(Object.assign({\n  className: function() {\n    return this.isOV() ? 'okta-verify-send-push-form' : 'custom-app-send-push-form';\n  },\n\n  save() {\n    return this.options.appState.get('authenticatorKey') === AUTHENTICATOR_KEY.OV ?\n      loc('oie.okta_verify.sendPushButton', 'login'):\n      loc('oie.custom_app.sendPushButton', 'login');\n  },\n\n  title() {\n    return this.isOV() ? loc('oie.okta_verify.push.title', 'login'): loc('oie.custom_app.push.title', 'login');\n  },\n\n  render() {\n    BaseForm.prototype.render.apply(this, arguments);\n    // Move checkbox below the button\n    // Checkbox is rendered by BaseForm using remediation response and \n    // hence by default always gets added above buttons.\n    const checkbox = this.$el.find('[data-se=\"o-form-fieldset-authenticator.autoChallenge\"]');\n    checkbox.length && this.$el.find('.o-form-button-bar').after(checkbox);\n  },\n\n  getUISchema() {\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    return uiSchemas.filter(schema => schema.name !== 'authenticator.methodType');\n  },\n\n  isOV() {\n    return this.options.appState.get('authenticatorKey') === AUTHENTICATOR_KEY.OV;\n  },\n}));\n\nexport default Body;\n","// Common view for OV push and custom app.\nimport { Collection } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport AuthenticatorVerifyOptions from '../../components/AuthenticatorVerifyOptions';\nimport { getAuthenticatorDataForVerification } from '../../utils/AuthenticatorUtil';\nimport { Body as SelectAuthenticatorVerifyViewBody } from '../SelectAuthenticatorVerifyView';\nimport { AUTHENTICATOR_KEY } from '../../../ion/RemediationConstants';\n\nconst Body = SelectAuthenticatorVerifyViewBody.extend({\n  getUISchema() {\n    // Change the UI schema to not display radios here.\n    const uiSchemas = BaseForm.prototype.getUISchema.apply(this, arguments);\n    const methodsSchema = uiSchemas.find(schema => schema.name === 'authenticator.methodType');\n\n    this._sortMethodOptionsIfDeviceKnown(methodsSchema.options);\n\n    const methodOptions = methodsSchema.options.map((option) => {\n      return Object.assign({}, option, getAuthenticatorDataForVerification({authenticatorKey:\n            this.isOV() ? AUTHENTICATOR_KEY.OV : AUTHENTICATOR_KEY.CUSTOM_APP}));\n    });\n    return [{\n      View: AuthenticatorVerifyOptions,\n      options: {\n        name: methodsSchema.name,\n        collection: new Collection(methodOptions),\n      }\n    }];\n  },\n\n  // If the `deviceKnown` attribute is true, we should put the signed_nonce method to the top of authenticator list.\n  // This is in sync with v2/ion/ui-schema/ion-object-handler.js - createOVOptions\n  _sortMethodOptionsIfDeviceKnown(methodOptions) {\n    // Check if the `deviceKnown` attribute is true\n    const deviceKnown = this.options?.currentViewState?.relatesTo?.value?.deviceKnown;\n\n    if (deviceKnown) {\n      const signedNonceIndex = methodOptions.findIndex((e) => e.value === 'signed_nonce');\n\n      if (signedNonceIndex > 0) {\n        const signedNonceModel = methodOptions[signedNonceIndex];\n\n        // Put the 'signed_nonce' option to the top of the list\n        methodOptions.splice(signedNonceIndex, 1);\n        methodOptions.unshift(signedNonceModel);\n      }\n    }\n  },\n  isOV() {\n    return this.options.appState.get('authenticatorKey') === AUTHENTICATOR_KEY.OV;\n  },\n});\n\nexport default Body;\n","// Common view for OV push and custom app.\nimport { BaseFooter } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport ChallengeOktaVerifyCustomAppPushOnlyFormView from './ChallengeOktaVerifyCustomAppPushOnlyFormView';\nimport ChallengeOktaVerifyCustomAppFormView from './ChallengeOktaVerifyCustomAppFormView';\n\nexport default BaseAuthenticatorView.extend({\n  initialize() {\n    BaseAuthenticatorView.prototype.initialize.apply(this, arguments);\n    if (this.isPushOnlyWithAutoChallengeFlow()) {\n      this.Body = ChallengeOktaVerifyCustomAppPushOnlyFormView;\n    } else {\n      this.Body = ChallengeOktaVerifyCustomAppFormView;\n      this.Footer = BaseFooter;\n    }\n  },\n\n  isPushOnlyWithAutoChallengeFlow() {\n    const methodType = this.options.appState.getSchemaByName('authenticator.methodType');\n    const hasAutoChallengeSchema = this.options.appState.getSchemaByName('authenticator.autoChallenge');\n    const methodTypeOptions = methodType?.options;\n    return hasAutoChallengeSchema && methodTypeOptions.length === 1 && methodTypeOptions[0].value === 'push';\n  },\n});\n","import BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport { BaseForm } from '../../internals';\nimport { loc, createCallout, _ } from '@okta/courage';\nimport { getBiometricsErrorOptions } from '../../utils/ChallengeViewUtil';\n\n// for EA,\n// redirect is needed for Apple SSO Extension to intercept the request, because\n// - XHR request is not interceptable\n// - form post is interceptable, but some app (Outlook) closes the app after\n// We may have a different approach/UX for GA\nconst Body = BaseForm.extend({\n  noButtonBar: true,\n\n  className: 'ion-form device-challenge-poll',\n\n  title() {\n    return loc('deviceTrust.sso.redirectText', 'login');\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n\n    this.listenTo(this.model, 'error', () => {\n      this.$('.spinner').hide();\n    });\n    this.add('<div class=\"credential-sso-extension\"><div class=\"spinner\"></div></div>');\n\n    const isGetMethod = this.options.currentViewState?.method?.toLowerCase() === 'get';\n    this.model.set('useRedirect', isGetMethod);\n    this.trigger('save', this.model);\n  },\n\n  showCustomFormErrorCallout(error) {\n    const options = getBiometricsErrorOptions(error, false);\n    \n    // If not biometrics error, just show the returned error message\n    if (_.isEmpty(options)) {\n      return false;\n    }\n\n    this.showMessages(createCallout(options));\n    return true;\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  className: 'oie-enroll-google-authenticator-barcode',\n  template: hbs`\n      {{#if href}}\n      <div class=\"google-authenticator-setup-info-title barcode-setup-title\">\n        {{i18n code=\"oie.enroll.google_authenticator.scanBarcode.title\" bundle=\"login\"}}\n      </div>\n      <div class=\"qrcode-info-container\">\n        <p class=\"google-authenticator-setup-info\">\n          {{i18n code=\"oie.enroll.google_authenticator.scanBarcode.description\" bundle=\"login\"}}\n        </p>\n        <div class=\"qrcode-container\">\n          <img class=\"qrcode\" src={{href}} alt=\"qr code\"></img>\n          <a href=\"#\" class=\"cannot-scan-link\">\n            {{i18n code=\"oie.enroll.google_authenticator.scanBarcode.cannotScan\" bundle=\"login\"}}\n          </a>\n        </div>\n        </div>\n      {{/if}}\n    `,\n\n  getTemplateData() {\n    const contextualData = this.options.appState.get('currentAuthenticator').contextualData;\n    return { href: contextualData.qrcode?.href };\n  },\n\n  events: {\n    'click .cannot-scan-link': function(e) {\n      e.preventDefault();\n      this.options.model.set('viewToDisplay', 'manual');\n    }\n  },\n});\n","import { View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\n\nexport default View.extend({\n  className: 'oie-enroll-google-authenticator-manual-setup',\n  template: hbs`\n      <div class=\"google-authenticator-setup-info-title manual-setup-title\">\n        {{i18n code=\"oie.enroll.google_authenticator.cannotScanBarcode.title\" bundle=\"login\"}}\n      </div>\n      <p class=\"google-authenticator-setup-info\">\n          {{i18n code=\"oie.enroll.google_authenticator.manualSetupInstructions\" bundle=\"login\"}}\n      </p>\n    `,\n});\n","import { loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport { addCustomButton, BaseForm, BaseView } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport EnrollGoogleAuthenticatorBarcodeView from './EnrollGoogleAuthenticatorBarcodeView';\nimport EnrollAuthenticatorManualSetupView from './EnrollAuthenticatorManualSetupView';\n\nconst VIEW_TO_DISPLAY = 'viewToDisplay';\nconst viewToDisplayState = {\n  BARCODE: 'barcode',\n  MANUAL: 'manual',\n  ENTER_CODE: 'enterCode',\n};\n\nconst Body = BaseForm.extend({\n  title() {\n    return loc('oie.enroll.google_authenticator.setup.title', 'login');\n  },\n\n  noButtonBar: true,\n\n  className: 'oie-enroll-google-authenticator',\n\n  enterCodeSubtitle: View.extend({\n    template: hbs`\n      <div class=\"google-authenticator-setup-info-title enter-code-title\">\n      {{i18n code=\"oie.enroll.google_authenticator.enterCode.title\" bundle=\"login\"}}\n      </div>\n    `,\n  }),\n\n  getUISchema() {\n    const schema = BaseForm.prototype.getUISchema.apply(this, arguments);\n    // https://oktainc.atlassian.net/browse/OKTA-555191\n    const nextButton = addCustomButton({\n      className: 'google-authenticator-next',\n      title: loc('oform.next', 'login'),\n      click: () => {\n        this.model.set(VIEW_TO_DISPLAY, viewToDisplayState.ENTER_CODE);\n      }\n    });\n\n    const verifyButton = addCustomButton({\n      className: 'google-authenticator-verify',\n      title: loc('oform.verify', 'login'),\n      click: () => {\n        this.$el.submit();\n      }\n    });\n\n    schema[0].showWhen = {\n      viewToDisplay: viewToDisplayState.ENTER_CODE,\n    };\n\n    // Add Enter Code Subtitle\n    schema.unshift({\n      View: this.enterCodeSubtitle,\n      selector: '.o-form-fieldset-container',\n      showWhen: {\n        viewToDisplay: viewToDisplayState.ENTER_CODE,\n      }\n    });\n\n    schema.push(\n      {\n        View: EnrollGoogleAuthenticatorBarcodeView,\n        selector: '.o-form-fieldset-container',\n        showWhen: {\n          viewToDisplay: viewToDisplayState.BARCODE,\n        }\n      }, {\n        View: EnrollAuthenticatorManualSetupView,\n        selector: '.o-form-fieldset-container',\n        showWhen: {\n          viewToDisplay: viewToDisplayState.MANUAL,\n        }\n      }, {\n        label: false,\n        className: 'shared-secret',\n        type: 'text',\n        placeholder: this.options.appState.get('currentAuthenticator').contextualData.sharedSecret,\n        disabled: true,\n        showWhen: {\n          viewToDisplay: viewToDisplayState.MANUAL,\n        }\n      },\n      {\n        View: nextButton,\n        showWhen: {\n          viewToDisplay: (val) => val === viewToDisplayState.BARCODE || val === viewToDisplayState.MANUAL,\n        }\n      },\n      {\n        View: verifyButton,\n        showWhen: {\n          viewToDisplay: (val) => val === viewToDisplayState.ENTER_CODE,\n        }\n      },\n    );\n    return schema;\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n  createModelClass() {\n    const ModelClass = BaseView.prototype.createModelClass.apply(this, arguments);\n    const local = Object.assign(\n      {\n        viewToDisplay: {\n          value: 'barcode',\n          type: 'string',\n          required: true,\n          values: [viewToDisplayState.BARCODE, viewToDisplayState.MANUAL, viewToDisplayState.ENTER_CODE],\n        }\n      },\n      ModelClass.prototype.local,\n    );\n    return ModelClass.extend({\n      local,\n    });\n  },\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseForm.extend(Object.assign(\n  {\n    className: 'google-authenticator-challenge',\n\n    title() {\n      return loc('oie.verify.google_authenticator.otp.title', 'login');\n    },\n\n    subtitle() {\n      return loc('oie.verify.google_authenticator.otp.description', 'login');\n    },\n\n    save() {\n      return loc('mfa.challenge.verify', 'login');\n    },\n  },\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst ON_PREM_TOKEN_CHANGE_KEY = 'errors.E0000113';\n\nconst Body = BaseForm.extend({\n\n  className: 'on-prem-authenticator-enroll',\n\n  modelEvents: {\n    'error': '_checkTokenChange'\n  },\n\n  title() {\n    const vendorName =\n      this.options.appState.getAuthenticatorDisplayName() ||\n      loc('oie.on_prem.authenticator.default.vendorName', 'login');\n    return loc('oie.on_prem.enroll.title', 'login', [vendorName]);\n  },\n\n  _checkTokenChange(model, convertedErrors) {\n    const errorSummaryKeys = convertedErrors?.responseJSON?.errorSummaryKeys;\n    if (errorSummaryKeys && errorSummaryKeys.includes(ON_PREM_TOKEN_CHANGE_KEY)) {\n      // this means we are in change pin, so we should clear out answer input\n      this.model.set('credentials.passcode', '');\n      this.render();\n    }\n  },\n\n  save() {\n    return loc('mfa.challenge.verify', 'login');\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst ON_PREM_TOKEN_CHANGE_KEY = 'errors.E0000113';\n\nconst Body = BaseForm.extend({\n\n  className: 'on-prem-authenticator-verify',\n\n  modelEvents: {\n    'error': '_checkTokenChange'\n  },\n\n  title() {\n    const vendorName =\n      this.options.appState.getAuthenticatorDisplayName() ||\n      loc('oie.on_prem.authenticator.default.vendorName', 'login');\n    return loc('oie.on_prem.verify.title', 'login', [vendorName]);\n  },\n\n  _checkTokenChange(model, convertedErrors) {\n    const errorSummaryKeys = convertedErrors?.responseJSON?.errorSummaryKeys;\n    if (errorSummaryKeys && errorSummaryKeys.includes(ON_PREM_TOKEN_CHANGE_KEY)) {\n      // this means we are in change pin, so we should clear out answer input\n      this.model.set('credentials.passcode', '');\n      this.render();\n    }\n  },\n\n  save() {\n    return loc('mfa.challenge.verify', 'login');\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc, createCallout } from '@okta/courage';\nimport Duo from '@okta/duo';\nimport { BaseForm } from '../../internals';\n\nexport default BaseForm.extend({\n\n  noButtonBar: true,\n\n  postRender: function() {\n    const contextualData = this.getContextualData();\n    // This is the place to check contextualData.integrationType once we support more types\n    // Currently we only support IFRAME\n    const duoFrame = this.add(`<iframe frameborder=\"0\" title=\"'${this.title()}'\"></iframe>`).last();\n    try {\n      Duo.init({\n        host: contextualData.host,\n        sig_request: contextualData.signedToken, // eslint-disable-line camelcase\n        iframe: duoFrame.el,\n        post_action: (signedData) => { // eslint-disable-line camelcase\n          this.model.set('credentials.signatureData', signedData);\n          this.saveForm(this.model);\n        },\n      });\n    } catch (e) {\n      duoFrame.remove();\n      this.add(createCallout({\n        type: 'error',\n        subtitle: loc('oie.duo.iFrameError', 'login'),\n      }), '.o-form-error-container');\n      console.error(e); // eslint-disable-line no-console\n    }\n  },\n\n  getContextualData() {\n    // to be overriden\n  }\n});\n","import { loc } from '@okta/courage';\nimport BaseDuoAuthenticatorForm from './BaseDuoAuthenticatorForm';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseDuoAuthenticatorForm.extend({\n  title() {\n    return loc('oie.duo.enroll.title', 'login');\n  },\n\n  getContextualData() {\n    return this.options.appState.get('currentAuthenticator').contextualData;\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport BaseDuoAuthenticatorForm from './BaseDuoAuthenticatorForm';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseDuoAuthenticatorForm.extend({\n  title() {\n    return loc('oie.duo.verify.title', 'login');\n  },\n\n  getContextualData() {\n    return this.options.appState.get('currentAuthenticatorEnrollment').contextualData;\n  },\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from 'v2/view-builder/components/BaseAuthenticatorView';\n\nexport const BaseIdPAuthenticatorBody =  BaseForm.extend({\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    this.model.set('useRedirect', true);\n    this.add('<div class=\"okta-waiting-spinner\"></div>');\n  }\n});\n\nexport const BaseIdpAuthenticatorView = BaseAuthenticatorView.extend({\n  postRender() {\n    BaseAuthenticatorView.prototype.postRender.apply(this, arguments);\n    // get the error messages\n    const messages = this.options.appState.get('messages') || {};\n    // In case of failure, don't auto-redirect which will result in infinite redirects.\n    // so catch the error and render to the user.\n    if (this.settings.get('features.skipIdpFactorVerificationBtn') && !Array.isArray(messages.value)) {\n      this.$('.o-form-button-bar').hide();\n      this.$('.okta-waiting-spinner').show();\n      this.form.trigger('save', this.model);\n    } else {\n      this.$('.okta-waiting-spinner').hide();\n      this.$('.o-form-button-bar').show();\n    }\n  }\n});\n","import { loc } from '@okta/courage';\nimport { BaseIdPAuthenticatorBody, BaseIdpAuthenticatorView} from './BaseIdpAuthenticator';\n\nconst Body = BaseIdPAuthenticatorBody.extend({\n\n  title() {\n    const displayName = this.options.appState.getAuthenticatorDisplayName();\n    return loc('oie.idp.challenge.title', 'login', [displayName]);\n  },\n\n  subtitle() {\n    const displayName = this.options.appState.getAuthenticatorDisplayName();\n    return loc('oie.idp.challenge.description', 'login', [displayName]);\n  },\n\n  save() {\n    return loc('mfa.challenge.verify', 'login');\n  },\n\n});\n\nexport default BaseIdpAuthenticatorView.extend({\n  Body\n});\n","import { loc } from '@okta/courage';\nimport { BaseIdPAuthenticatorBody, BaseIdpAuthenticatorView} from './BaseIdpAuthenticator';\n\nconst Body = BaseIdPAuthenticatorBody.extend({\n\n  title() {\n    const displayName = this.options.appState.getAuthenticatorDisplayName();\n    return loc('oie.idp.enroll.title', 'login', [displayName]);\n  },\n\n  subtitle() {\n    const displayName = this.options.appState.getAuthenticatorDisplayName();\n    return loc('oie.idp.enroll.description', 'login', [displayName]);\n  },\n\n  save() {\n    return loc('mfa.enroll', 'login');\n  },\n\n});\n\nexport default BaseIdpAuthenticatorView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseForm.extend(Object.assign(\n  {\n    className: 'mfa-verify-custom-otp',\n\n    title() {\n      const vendorName =\n        this.options.appState.getAuthenticatorDisplayName() ||\n        loc('oie.custom_otp.authenticator.default.vendorName', 'login');\n      return loc('oie.verify.custom_otp.title', 'login', [vendorName]);\n    },\n\n    subtitle() {\n      return loc('oie.verify.custom_otp.description', 'login');\n    },\n\n    save() {\n      return loc('mfa.challenge.verify', 'login');\n    },\n  },\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport BaseForm from '../../internals/BaseForm';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst Body = BaseForm.extend({\n\n  title() {\n    const displayName = this.options.appState.getAuthenticatorDisplayName();\n    return this.options.appState.isAuthenticatorChallenge()\n      ? loc('oie.symantecVip.challenge.title', 'login', [displayName])\n      : loc('oie.symantecVip.enroll.title', 'login', [displayName]);\n  },\n\n  subtitle() {\n    const displayName = this.options.appState.getAuthenticatorDisplayName();\n    return this.options.appState.isAuthenticatorChallenge()\n      ? loc('oie.symantecVip.challenge.description', 'login', [displayName])\n      : loc('oie.symantecVip.enroll.description', 'login', [displayName]);\n  },\n\n  save() {\n    return this.options.appState.isAuthenticatorChallenge()\n      ? loc('mfa.challenge.verify', 'login')\n      : loc('mfa.enroll', 'login');\n  },\n\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm, BaseView } from '../../internals';\n\nconst Body = BaseForm.extend({\n\n  title() {\n    return loc('device.code.activate.title', 'login');\n  },\n\n  subtitle() {\n    return loc('device.code.activate.subtitle', 'login');\n  },\n\n  events: {\n    'keyup input[name=\"userCode\"]': function(e) {\n      e.preventDefault();\n      this.addHyphen(e);\n    }\n  },\n\n  addHyphen(evt) {\n    const currentVal = evt.target.value;\n    // add hyphen after 4th character\n    if (currentVal && currentVal.length === 4 && !['Backspace', 'Delete', '-'].includes(evt.key)) {\n      evt.target.value = currentVal.concat('-');\n    }\n  },\n});\n\nexport default BaseView.extend({\n  Body\n});\n","import { BaseHeader } from '../../internals';\nimport HeaderBeacon from '../../components/HeaderBeacon';\n\nexport default BaseHeader.extend({\n  HeaderBeacon: HeaderBeacon.extend({\n    getBeaconClassName: function() {\n      return 'smartcard';\n    },\n  })\n});\n","import { loc } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\nimport PIVHeader from './PIVHeader';\n\nconst Body = BaseForm.extend({\n\n  className: 'piv-cac-card',\n  modelEvents: {\n    request: 'startAuthentication',\n    error: 'stopAuthentication',\n  },\n\n  initialize() {\n    BaseForm.prototype.initialize.apply(this, arguments);\n    this.model.set('useRedirect', true);\n    this.addInstructions();\n  },\n\n  title() {\n    return loc('piv.cac.title', 'login');\n  },\n\n  save() {\n    return loc('retry', 'login');\n  },\n\n  addInstructions() {\n    this.add(\n      `<div class='piv-verify-text'>\n        <p>${loc('piv.cac.card.insert', 'login')}</p>\n        <div data-se='piv-waiting' class='okta-waiting-spinner'></div>\n      </div>`\n    );\n  },\n  \n  startAuthentication: function() {\n    this.$('.okta-waiting-spinner').show();\n    this.$('.o-form-button-bar').hide();\n  },\n\n  stopAuthentication: function() {\n    this.$('.okta-waiting-spinner').hide();\n    this.$('.o-form-button-bar').show();\n  }\n  \n});\n\nexport default BaseAuthenticatorView.extend({\n  Header: PIVHeader,\n  Body,\n  postRender() {\n    BaseAuthenticatorView.prototype.postRender.apply(this, arguments);\n    const messages = this.options.appState.get('messages') || {};\n    // if piv view has errors, show errors and stop authentication.\n    // otherwise trigger authentication on page load\n    if (Array.isArray(messages.value)) {\n      this.form.stopAuthentication();\n    } else {\n      this.form.startAuthentication();\n      this.form.trigger('save', this.model);\n    }\n  },\n});\n","import { loc, View } from '@okta/courage';\nimport hbs from '@okta/handlebars-inline-precompile';\nimport BaseForm from '../../internals/BaseForm';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst ExampleView = View.extend({\n  template: hbs`<div aria-hidden=\"true\" class=\"yubikey-demo\"></div>`,\n});\n\nconst Body = BaseForm.extend({\n  title() {\n    return this.options.appState.isAuthenticatorChallenge()\n      ? loc('oie.yubikey.challenge.title', 'login')\n      : loc('oie.yubikey.enroll.title', 'login');\n  },\n\n  subtitle() {\n    return loc('oie.yubikey.description', 'login');\n  },\n\n  save() {\n    return loc('mfa.challenge.verify', 'login');\n  },\n\n  getUISchema() {\n    const schema = BaseForm.prototype.getUISchema.apply(this, arguments);\n    schema.unshift({\n      View: ExampleView,\n      selector: '.o-form-fieldset-container',\n    });\n    return schema;\n  },\n\n});\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { loc, createCallout } from '@okta/courage';\nimport { BaseForm } from '../../internals';\nimport BaseAuthenticatorView from '../../components/BaseAuthenticatorView';\n\nconst CUSTOM_APP_UV_ENABLE_BIOMETRIC_SERVER_KEY = 'oie.authenticator.custom_app.method.push.verify.enable.biometrics';\n\nconst Body = BaseForm.extend(Object.assign(\n  {\n    className: 'custom-app-verify-resend-push',\n\n    title() {\n      return loc('oie.verify.custom_app.title', 'login', [this.options.appState.getAuthenticatorDisplayName()]);\n    },\n\n    save() {\n      return loc('oie.custom_app.push.resend', 'login');\n    },\n\n    showMessages() {\n      let options = {};\n      if (this.options.appState.containsMessageWithI18nKey(CUSTOM_APP_UV_ENABLE_BIOMETRIC_SERVER_KEY)) {\n        // add a title, subtitle, and bullet-points for \n        // Custom App enable biometrics message during verification\n        options.content = null;\n        options.className = 'okta-verify-uv-callout-content';\n        options.title = loc('oie.authenticator.custom_app.method.push.verify.enable.biometrics.title',\n          'login', [this.options.appState.getAuthenticatorDisplayName()]);\n        options.subtitle =\n        loc('oie.authenticator.custom_app.method.push.verify.enable.biometrics.description', 'login');\n        options.type = 'error';\n        options.bullets = [\n          loc('oie.authenticator.custom_app.method.push.verify.enable.biometrics.point1', 'login'),\n          loc('oie.authenticator.custom_app.method.push.verify.enable.biometrics.point2',\n            'login', [this.options.appState.getAuthenticatorDisplayName()]),\n          loc('oie.authenticator.custom_app.method.push.verify.enable.biometrics.point3',\n            'login', [this.options.appState.getAuthenticatorDisplayName()])\n        ];\n        options = createCallout(options);\n      }\n      BaseForm.prototype.showMessages.call(this, options);\n    },\n  },\n));\n\nexport default BaseAuthenticatorView.extend({\n  Body,\n});\n","import { createButton, loc, _ } from '@okta/courage';\nimport { BaseView, BaseForm } from '../../internals';\nimport Util from '../../../../util/Util';\n\nconst Body = BaseForm.extend({\n  title() {\n    return loc('password.expired.title.generic', 'login');\n  },\n  subtitle() {\n    return loc('password.expired.custom.subtitle', 'login');\n  },\n  noSubmitButton: true,\n  initialize() {\n    const { customExpiredPasswordName, customExpiredPasswordURL } = this.options.currentViewState;\n    this.add(createButton({\n      className: 'button button-primary button-wide',\n      title: _.partial(loc, 'password.expired.custom.submit', 'login', [customExpiredPasswordName]),\n      click: () => {\n        Util.redirect(customExpiredPasswordURL);\n      },\n    }));\n  },\n});\n\nexport default BaseView.extend({ Body });\n","import { createButton, loc, _ } from '@okta/courage';\nimport { BaseView, BaseForm, BaseFooter } from '../../internals';\nimport Util from '../../../../util/Util';\n\nconst Body = BaseForm.extend({\n  className: 'password-authenticator',\n  subtitle() {\n    return this.settings.get('brandName') ? loc('password.expiring.soon.subtitle.specific', 'login', \n      [this.settings.get('brandName')]) : loc('password.expiring.soon.subtitle.generic', 'login');\n  },\n  title() {\n    const passwordPolicy = this.options.appState.get('currentAuthenticator')?.settings;\n    const daysToExpiry = passwordPolicy.daysToExpiry;\n\n    if (daysToExpiry > 0) {\n      return loc('password.expiring.title', 'login', [daysToExpiry]);\n    } else if (daysToExpiry === 0) {\n      return loc('password.expiring.today', 'login');\n    } else {\n      return loc('password.expiring.soon', 'login');\n    }\n  },\n  noSubmitButton: true,\n  initialize() {\n    const { customExpiredPasswordName, customExpiredPasswordURL } = this.options.currentViewState;\n    this.add(createButton({\n      className: 'button button-primary button-wide',\n      title: _.partial(loc, 'password.expired.custom.submit', 'login', [customExpiredPasswordName]),\n      click: () => {\n        Util.redirect(customExpiredPasswordURL);\n      },\n    }));\n  },\n});\n\nconst Footer = BaseFooter.extend({\n  links() {\n    const links = [];\n    if (this.options.appState.hasRemediationObject('skip')) {\n      links.push({\n        'type': 'link',\n        'label': loc('password.expiring.later', 'login'),\n        'name': 'skip',\n        'actionPath': 'skip',\n      });\n    }\n    return links;\n  }\n});\n\nexport default BaseView.extend({ Body, Footer });\n","import Logger from 'util/Logger';\nimport { AUTHENTICATOR_KEY, FORMS as RemediationForms } from '../ion/RemediationConstants';\nimport { BaseView } from './internals';\n\n// Identify\nimport IdentifierView from './views/IdentifierView';\nimport RedirectIdPView from './views/RedirectIdPView';\nimport IdentifyRecoveryView from './views/IdentifyRecoveryView';\n\n// Terminal & Auto-Redirect\nimport TerminalView from './views/TerminalView';\nimport AutoRedirectView from './views/AutoRedirectView';\n\n// safe mode poll view\nimport PollView from './views/PollView';\n\n// consent\nimport AdminConsentView from './views/consent/AdminConsentView';\nimport EnduserConsentView from './views/consent/EnduserConsentView';\nimport GranularConsentView from './views/consent/GranularConsentView';\nimport EnduserEmailConsentView from './views/consent/EnduserEmailConsentView';\n\n// Device (Okta Verify)\nimport DeviceChallengePollView from './views/device/DeviceChallengePollView';\nimport SSOExtensionView from './views/device/SSOExtensionView';\nimport SignInDeviceView from './views/device/SignInDeviceView';\nimport DeviceEnrollmentTerminalView from './views/device/DeviceEnrollmentTerminalView';\n\n// registration\nimport EnrollProfileView from './views/EnrollProfileView';\n\n// registration update\nimport EnrollProfileUpdateView from './views/EnrollProfileUpdateView';\n\n// Email Activation\nimport RequestActivationEmail from './views/activation/RequestActivationEmailView';\n\n// authenticator list\nimport SelectAuthenticatorEnrollView from './views/SelectAuthenticatorEnrollView';\nimport SelectAuthenticatorVerifyView from './views/SelectAuthenticatorVerifyView';\nimport SelectAuthenticatorUnlockAccountView from './views/authenticator/SelectAuthenticatorUnlockAccountView';\n\n// password\nimport EnrollAuthenticatorPasswordView from './views/password/EnrollAuthenticatorPasswordView';\nimport ChallengeAuthenticatorPasswordView from './views/password/ChallengeAuthenticatorPasswordView';\nimport ReEnrollAuthenticatorPasswordView from './views/password/ReEnrollAuthenticatorPasswordView';\nimport ReEnrollAuthenticatorWarningPasswordView from './views/password/ReEnrollAuthenticatorWarningPasswordView';\nimport ResetAuthenticatorPasswordView from './views/password/ResetAuthenticatorPasswordView';\n\n// phone\nimport EnrollAuthenticatorPhoneView from './views/phone/EnrollAuthenticatorPhoneView';\nimport EnrollAuthenticatorDataPhoneView from './views/phone/EnrollAuthenticatorDataPhoneView';\nimport ChallengeAuthenticatorPhoneView from './views/phone/ChallengeAuthenticatorPhoneView';\nimport ChallengeAuthenticatorDataPhoneView from './views/phone/ChallengeAuthenticatorDataPhoneView';\n\n// security question\nimport EnrollAuthenticatorSecurityQuestion from './views/security-question/EnrollAuthenticatorSecurityQuestionView';\nimport ChallengeAuthenticatorSecurityQuestion from './views/security-question/ChallengeAuthenticatorSecurityQuestion';\n\n//webauthn\nimport EnrollWebauthnView from './views/webauthn/EnrollWebauthnView';\nimport ChallengeWebauthnView from './views/webauthn/ChallengeWebauthnView';\n\n// email\nimport EnrollAuthenticatorEmailView from './views/email/EnrollAuthenticatorEmailView';\nimport ChallengeAuthenticatorEmailView from './views/email/ChallengeAuthenticatorEmailView';\nimport ChallengeAuthenticatorDataEmailView from './views/email/ChallengeAuthenticatorDataEmailView';\n\n// app (okta verify)\nimport EnrollPollOktaVerifyView from './views/ov/EnrollPollOktaVerifyView';\nimport SelectEnrollmentChannelOktaVerifyView from './views/ov/SelectEnrollmentChannelOktaVerifyView';\nimport EnrollementChannelDataOktaVerifyView from './views/ov/EnrollementChannelDataOktaVerifyView';\nimport ChallengeOktaVerifyView from './views/ov/ChallengeOktaVerifyView';\nimport ChallengeOktaVerifyTotpView from './views/ov/ChallengeOktaVerifyTotpView';\nimport ChallengeOktaVerifyResendPushView from './views/ov/ChallengeOktaVerifyResendPushView';\nimport ChallengeOktaVerifyCustomAppDataView from './views/shared/ChallengeOktaVerifyCustomAppDataView';\nimport ChallengeOktaVerifySSOExtensionView from './views/ov/ChallengeOktaVerifySSOExtensionView';\n\n// app (google authenticator)\nimport EnrollAuthenticatorGoogleAuthenticatorView from './views/google-authenticator/EnrollAuthenticatorGoogleAuthenticatorView';\nimport ChallengeGoogleAuthenticatorView from './views/google-authenticator/ChallengeGoogleAuthenticatorView';\n\n// on-prem mfa\nimport EnrollAuthenticatorOnPremView from './views/on-prem/EnrollAuthenticatorOnPremView';\nimport ChallengeAuthenticatorOnPremView from './views/on-prem/ChallengeAuthenticatorOnPremView';\n\n// duo mfa\nimport EnrollDuoAuthenticatorView from './views/duo/EnrollDuoAuthenticatorView';\nimport ChallengeDuoAuthenticatorView from './views/duo/ChallengeDuoAuthenticatorView';\n\n// idp authenticator\nimport AuthenticatorIdPVerifyView from './views/idp/AuthenticatorIdPVerifyView';\nimport AuthenticatorIdPEnrollView from './views/idp/AuthenticatorIdPEnrollView';\n\n// custom otp\nimport ChallengeCustomOTPAuthenticatorView from './views/custom-otp/ChallengeCustomOTPAuthenticatorView';\n\n// Symantec VIP authenticator\nimport AuthenticatorSymantecView from './views/symantec/AuthenticatorSymantecView';\n\n// Device code activate view\nimport DeviceCodeActivateView from './views/device/DeviceCodeActivateView';\n\n// X509 PIV view\nimport ChallengePIVView from './views/piv/ChallengePIVView';\n\n// YubiKey\nimport AuthenticatorYubiKeyView from './views/yubikey/AuthenticatorYubiKeyView';\n\n// custom app\nimport ChallengePushView from './views/shared/ChallengePushView';\nimport ChallengeCustomAppResendPushView from './views/custom-app/ChallengeCustomAppResendPushView';\n\n// custom password\nimport ReEnrollCustomPasswordExpiryView from './views/custom-password/ReEnrollCustomPasswordExpiryView';\nimport ReEnrollCustomPasswordExpiryWarningView from './views/custom-password/ReEnrollCustomPasswordExpiryWarningView';\n\nconst DEFAULT = '_';\n\nconst VIEWS_MAPPING = {\n  [RemediationForms.IDENTIFY]: {\n    [DEFAULT]: IdentifierView,\n  },\n  [RemediationForms.IDENTIFY_RECOVERY]: {\n    [DEFAULT]: IdentifyRecoveryView,\n  },\n  [RemediationForms.DEVICE_CHALLENGE_POLL]: {\n    [DEFAULT]: DeviceChallengePollView,\n  },\n  [RemediationForms.LAUNCH_AUTHENTICATOR]: {\n    [DEFAULT]: SignInDeviceView,\n  },\n  [RemediationForms.DEVICE_APPLE_SSO_EXTENSION]: {\n    [DEFAULT]: SSOExtensionView,\n    [AUTHENTICATOR_KEY.OV]: ChallengeOktaVerifySSOExtensionView,\n  },\n  [RemediationForms.CANCEL_TRANSACTION]: {\n    [DEFAULT]: SSOExtensionView,\n  },\n  [RemediationForms.ENROLL_PROFILE]: {\n    [DEFAULT]: EnrollProfileView,\n  },\n  [RemediationForms.ENROLL_PROFILE_UPDATE]: {\n    [DEFAULT]: EnrollProfileUpdateView,\n  },\n  [RemediationForms.POLL]: {\n    [DEFAULT]: PollView\n  },\n  [RemediationForms.REQUEST_ACTIVATION]: {\n    [DEFAULT]: RequestActivationEmail\n  },\n  [RemediationForms.SELECT_AUTHENTICATOR_ENROLL]: {\n    [DEFAULT]: SelectAuthenticatorEnrollView,\n  },\n  [RemediationForms.AUTHENTICATOR_ENROLLMENT_DATA]: {\n    [AUTHENTICATOR_KEY.PHONE]: EnrollAuthenticatorDataPhoneView,\n    [AUTHENTICATOR_KEY.EMAIL]: ChallengeAuthenticatorDataEmailView,\n  },\n  [RemediationForms.CONSENT_ADMIN]: {\n    [DEFAULT]: AdminConsentView\n  },\n  [RemediationForms.CONSENT_ENDUSER]: {\n    [DEFAULT]: EnduserConsentView\n  },\n  [RemediationForms.CONSENT_GRANULAR]: {\n    [DEFAULT]: GranularConsentView\n  },\n  [RemediationForms.CONSENT_EMAIL_CHALLENGE]: {\n    [DEFAULT]: EnduserEmailConsentView,\n  },\n  [RemediationForms.ENROLL_AUTHENTICATOR]: {\n    [AUTHENTICATOR_KEY.DUO]: EnrollDuoAuthenticatorView,\n    [AUTHENTICATOR_KEY.EMAIL]: EnrollAuthenticatorEmailView,\n    [AUTHENTICATOR_KEY.GOOGLE_OTP]: EnrollAuthenticatorGoogleAuthenticatorView,\n    [AUTHENTICATOR_KEY.IDP]: AuthenticatorIdPEnrollView,\n    [AUTHENTICATOR_KEY.ON_PREM]: EnrollAuthenticatorOnPremView,\n    [AUTHENTICATOR_KEY.PASSWORD]: EnrollAuthenticatorPasswordView,\n    [AUTHENTICATOR_KEY.PHONE]: EnrollAuthenticatorPhoneView,\n    [AUTHENTICATOR_KEY.RSA]: EnrollAuthenticatorOnPremView,\n    [AUTHENTICATOR_KEY.SECURITY_QUESTION]: EnrollAuthenticatorSecurityQuestion,\n    [AUTHENTICATOR_KEY.SYMANTEC_VIP]: AuthenticatorSymantecView,\n    [AUTHENTICATOR_KEY.WEBAUTHN]: EnrollWebauthnView,\n    [AUTHENTICATOR_KEY.YUBIKEY]: AuthenticatorYubiKeyView,\n  },\n  [RemediationForms.CHALLENGE_AUTHENTICATOR]: {\n    [AUTHENTICATOR_KEY.CUSTOM_OTP]: ChallengeCustomOTPAuthenticatorView,\n    [AUTHENTICATOR_KEY.DUO]: ChallengeDuoAuthenticatorView,\n    [AUTHENTICATOR_KEY.EMAIL]: ChallengeAuthenticatorEmailView,\n    [AUTHENTICATOR_KEY.GOOGLE_OTP]: ChallengeGoogleAuthenticatorView,\n    [AUTHENTICATOR_KEY.IDP]: AuthenticatorIdPVerifyView,\n    [AUTHENTICATOR_KEY.ON_PREM]: ChallengeAuthenticatorOnPremView,\n    [AUTHENTICATOR_KEY.OV]: ChallengeOktaVerifyTotpView,\n    [AUTHENTICATOR_KEY.PASSWORD]: ChallengeAuthenticatorPasswordView,\n    [AUTHENTICATOR_KEY.PHONE]: ChallengeAuthenticatorPhoneView,\n    [AUTHENTICATOR_KEY.RSA]: ChallengeAuthenticatorOnPremView,\n    [AUTHENTICATOR_KEY.SECURITY_QUESTION]: ChallengeAuthenticatorSecurityQuestion,\n    [AUTHENTICATOR_KEY.SYMANTEC_VIP]: AuthenticatorSymantecView,\n    [AUTHENTICATOR_KEY.WEBAUTHN]: ChallengeWebauthnView,\n    [AUTHENTICATOR_KEY.YUBIKEY]: AuthenticatorYubiKeyView,\n  },\n  [RemediationForms.ENROLL_POLL]: {\n    [AUTHENTICATOR_KEY.OV]: EnrollPollOktaVerifyView,\n  },\n  [RemediationForms.SELECT_ENROLLMENT_CHANNEL]: {\n    [AUTHENTICATOR_KEY.OV]: SelectEnrollmentChannelOktaVerifyView,\n  },\n  [RemediationForms.ENROLLMENT_CHANNEL_DATA]: {\n    [AUTHENTICATOR_KEY.OV]: EnrollementChannelDataOktaVerifyView,\n  },\n  // Expired scenarios for authenticators..\n  [RemediationForms.REENROLL_AUTHENTICATOR]: {\n    // Password expired scenario..\n    [AUTHENTICATOR_KEY.PASSWORD]: ReEnrollAuthenticatorPasswordView\n  },\n  [RemediationForms.REENROLL_CUSTOM_PASSWORD_EXPIRY]: {\n    // Custom password expired scenario\n    [AUTHENTICATOR_KEY.PASSWORD]: ReEnrollCustomPasswordExpiryView,\n  },\n  [RemediationForms.REENROLL_CUSTOM_PASSWORD_EXPIRY_WARNING]: {\n    // Custom password expiry warning scenario\n    [AUTHENTICATOR_KEY.PASSWORD]: ReEnrollCustomPasswordExpiryWarningView,\n  },\n  // Will expire soon warnings for authenticators..\n  [RemediationForms.REENROLL_AUTHENTICATOR_WARNING]: {\n    // Password will expire soon scenario..\n    [AUTHENTICATOR_KEY.PASSWORD]: ReEnrollAuthenticatorWarningPasswordView,\n  },\n  // Reset forms for authenticators..\n  [RemediationForms.RESET_AUTHENTICATOR]: {\n    // Admin driven password reset..\n    [AUTHENTICATOR_KEY.PASSWORD]: ResetAuthenticatorPasswordView,\n  },\n  [RemediationForms.SELECT_AUTHENTICATOR_AUTHENTICATE]: {\n    [DEFAULT]: SelectAuthenticatorVerifyView,\n  },\n  [RemediationForms.SELECT_AUTHENTICATOR_UNLOCK]: {\n    [DEFAULT]: SelectAuthenticatorUnlockAccountView,\n  },\n  [RemediationForms.CHALLENGE_POLL]: {\n    [AUTHENTICATOR_KEY.OV]: ChallengeOktaVerifyView,\n    [AUTHENTICATOR_KEY.CUSTOM_APP]: ChallengePushView,\n  },\n  [RemediationForms.RESEND]: {\n    [AUTHENTICATOR_KEY.OV]: ChallengeOktaVerifyResendPushView,\n    [AUTHENTICATOR_KEY.CUSTOM_APP]: ChallengeCustomAppResendPushView,\n  },\n  [RemediationForms.AUTHENTICATOR_VERIFICATION_DATA]: {\n    [AUTHENTICATOR_KEY.PHONE]: ChallengeAuthenticatorDataPhoneView,\n    [AUTHENTICATOR_KEY.OV]: ChallengeOktaVerifyCustomAppDataView,\n    [AUTHENTICATOR_KEY.EMAIL]: ChallengeAuthenticatorDataEmailView,\n    [AUTHENTICATOR_KEY.CUSTOM_APP]: ChallengeOktaVerifyCustomAppDataView,\n  },\n  [RemediationForms.FAILURE_REDIRECT]: {\n    [DEFAULT]: AutoRedirectView,\n  },\n  [RemediationForms.SUCCESS_REDIRECT]: {\n    [DEFAULT]: AutoRedirectView,\n  },\n  [RemediationForms.REDIRECT_IDP]: {\n    [DEFAULT]: RedirectIdPView,\n  },\n  [RemediationForms.PIV_IDP]: {\n    [DEFAULT]: ChallengePIVView,\n  },\n  [RemediationForms.DEVICE_ENROLLMENT_TERMINAL]: {\n    [DEFAULT]: DeviceEnrollmentTerminalView,\n  },\n  [RemediationForms.USER_CODE] : {\n    [DEFAULT] : DeviceCodeActivateView\n  },\n  [RemediationForms.TERMINAL]: {\n    [DEFAULT]: TerminalView,\n  },\n};\n\nexport default {\n  create(formName, authenticatorKey = DEFAULT) {\n    const config = VIEWS_MAPPING[formName];\n    if (!config) {\n      Logger.warn(`Cannot find customized View for ${formName}.`);\n      return BaseView;\n    }\n    const View = config[authenticatorKey] || config[DEFAULT];\n    if (!View) {\n      Logger.warn(`Cannot find customized View for ${formName} + ${authenticatorKey}.`);\n      return BaseView;\n    }\n\n    return View;\n  }\n};\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { FORMS as RemediationForms } from './RemediationConstants';\n\nconst flattenObj = (obj) => {\n  let result = {};\n\n  Object.keys(obj).forEach((key) => {\n    if (typeof obj[key] !== 'object') {\n      result[key] = obj[key];\n      return;\n    }\n\n    const tempObj = flattenObj(obj[key]);\n    Object.keys(tempObj).forEach((j) => {\n      result[key + '.' + j] = tempObj[j];\n    });\n  });\n  return result;\n};\n\n/**\n * This function is for the Granular Consent remediation, scopes within the optedScopes\n * property can include a singular value or n values delimited by a \".\"\n * When they are delimited, BackBone's toJSON function will create a nested object, however,\n * these should not be nested and the delimited key names should stay as is. So this function will\n * flatten those nested proeprties to format it how the backend expects it. \n * i.e. { optedScopes: { some: { scope: true }}} = { optedScopes: { 'some.scope': true }}\n * Currently, this is only used when the Granular Consent view form is saved see:\n * src/v2/view-builder/views/consent/GranularConsentView.js\n * \n * @param {JSON} modelJSON JSON Equivalent of the Backbone Model's attributes/fields\n * @returns If the JSON contains the optedScopes Property, we will flatten the fields from\n * a nested object into K/V pair with dot notation for nested key names. Otherwise, we will return\n * the JSON as is.\n */\nconst transformOptedScopes = (modelJSON) => {\n  if (modelJSON.optedScopes && typeof modelJSON.optedScopes !== 'string') {\n    const data = {\n      ...modelJSON,\n      optedScopes: flattenObj(modelJSON.optedScopes),\n    };\n    return data;\n  }\n  return modelJSON;\n};\n\nconst FormNameToTransformerHandler = {\n  [RemediationForms.CONSENT_GRANULAR]: transformOptedScopes,\n};\n\n/**\n * The purpose of this function is the transform the\n * Backbone Model's attributes/fields into a JSON equivalent before sending to IDX,\n * since the Model fields are all flattend when the UI Schema is transformed on consumption.\n * \n * @param {string} formName Form name of the current remediation\n * @param {Model} model Backbone Model Class\n * @returns JSON equivalent of the Model\n */\nconst transformPayload = (formName, model) => {\n  const modelJSON = model.toJSON();\n  const transformHandler = FormNameToTransformerHandler[formName];\n  if (typeof transformHandler === 'undefined') {\n    return modelJSON;\n  }\n  return transformHandler(modelJSON);\n};\n\nexport default transformPayload;\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\nimport { _, Controller, loc } from '@okta/courage';\nimport ViewFactory from '../view-builder/ViewFactory';\nimport IonResponseHelper from '../ion/IonResponseHelper';\nimport { getV1ClassName } from '../ion/ViewClassNamesFactory';\nimport { FORMS, TERMINAL_FORMS, FORM_NAME_TO_OPERATION_MAP } from '../ion/RemediationConstants';\nimport transformPayload from '../ion/payloadTransformer';\nimport Util from 'util/Util';\nimport sessionStorageHelper from '../client/sessionStorageHelper';\nimport { HttpResponse, IdxStatus, ProceedOptions } from '@okta/okta-auth-js';\nimport { EventErrorContext } from 'types/events';\nimport { CONFIGURED_FLOW } from '../client/constants';\nimport { ConfigError } from 'util/Errors';\nimport { updateAppState } from 'v2/client';\nimport CookieUtil from '../../util/CookieUtil';\nimport BrowserFeatures from \"util/BrowserFeatures\";\n\nexport interface ContextData {\n  controller: string;\n  formName: string;\n  authenticatorKey?: string;\n  methodType?: string;\n}\n\nexport default Controller.extend({\n  className: 'form-controller',\n\n  appStateEvents: {\n    'change:currentFormName': 'handleFormNameChange',\n    'afterError': 'handleAfterError',\n    'invokeAction': 'handleInvokeAction',\n    'saveForm': 'handleSaveForm',\n    'switchForm': 'handleSwitchForm',\n  },\n\n  preRender() {\n    this.removeChildren();\n  },\n\n  postRender() {\n    const currentViewState = this.options.appState.getCurrentViewState();\n    // TODO: add comments regarding when `currentViewState` would be null?\n    if (!currentViewState) {\n      return;\n    }\n\n    this.clearMetadata();\n\n    let formName = currentViewState.name;\n    if (formName === 'identify' && this.options.settings.get('flow') === CONFIGURED_FLOW.RESET_PASSWORD) {\n      formName = 'identify-recovery';\n    }\n    const TheView = ViewFactory.create(\n      formName,\n      this.options.appState.get('authenticatorKey'),\n    );\n    try {\n      this.formView = this.add(TheView, {\n        options: {\n          currentViewState,\n        }\n      }).last();\n    } catch (error) {\n      // This is the place where runtime error (NPE) happens at most of time.\n      // It has been swallowed by Q.js hence add try/catch to surface up errors.\n      this.options.settings.callGlobalError(error);\n      return;\n    }\n\n    this.triggerAfterRenderEvent();\n  },\n\n  clearMetadata() {\n    const formName = this.options.appState.get('currentFormName');\n    // TODO: OKTA-392835 shall not clear state handle at terminal page\n    if (TERMINAL_FORMS.includes(formName)) {\n      sessionStorageHelper.removeStateHandle();\n    }\n  },\n\n  triggerAfterRenderEvent() {\n    const contextData = this.createAfterEventContext();\n    this.trigger('afterRender', contextData);\n  },\n\n  handleFormNameChange() {\n    this.render();\n  },\n\n  handleAfterError(error: HttpResponse) {\n    const contextData = this.createAfterEventContext();\n    const errorContextData: EventErrorContext = {\n      xhr: error,\n      errorSummary: error.responseJSON && error.responseJSON.errorSummary,\n    };\n    // TODO: need some enhancement after https://github.com/okta/okta-idx-js/pull/27\n    // OKTA-318062\n    this.trigger('afterError', contextData, errorContextData);\n  },\n\n  createAfterEventContext(): ContextData {\n    const formName = this.options.appState.get('currentFormName');\n    const authenticatorKey = this.options.appState.get('authenticatorKey');\n    const methodType = this.options.appState.get('authenticatorMethodType');\n    const isPasswordRecoveryFlow = this.options.appState.get('isPasswordRecoveryFlow');\n\n    const v1ControllerClassName = getV1ClassName(\n      formName,\n      authenticatorKey,\n      methodType,\n      isPasswordRecoveryFlow,\n    );\n\n    const eventData: ContextData = {\n      controller: v1ControllerClassName,\n      formName,\n    };\n\n    if (authenticatorKey) {\n      eventData.authenticatorKey = authenticatorKey;\n    }\n    if (methodType) {\n      eventData.methodType = methodType;\n    }\n\n    return eventData;\n  },\n\n  handleSwitchForm(formName) {\n    // trigger formName change to change view\n    if (this.options.appState.get('messages')) {\n      // Clear messages before calling switch form.\n      // If a form has errors sent form API inside messages\n      // and user hits back to factors list which triggers switchForm,\n      // those error will show up on another screen that gets rendered after switchForm\n      this.options.appState.unset('messages');\n    }\n    this.options.appState.set('currentFormName', formName);\n  },\n\n  // eslint-disable-next-line max-statements\n  async handleInvokeAction(actionPath = '', actionParams = {}) {\n    const { appState, settings } = this.options;\n    const idx = appState.get('idx');\n    const { stateHandle } = idx.context;\n    let invokeOptions: ProceedOptions = {\n      exchangeCodeForTokens: false, // we handle this in interactionCodeFlow.js\n      stateHandle\n    };\n    let error;\n\n    // Cancel action is executes synchronously\n    if (actionPath === 'cancel') {\n      // TODO: resolve race conditions caused by event pattern: OKTA-490220\n      settings.getAuthClient().transactionManager.clear({ clearIdxResponse: false });\n      sessionStorageHelper.removeStateHandle();\n      appState.clearAppStateCache();\n\n      if (settings.get('oauth2Enabled')) {\n        // In this case we need to restart login flow and recreate transaction meta\n        // that will be used in interactionCodeFlow function\n        appState.trigger('restartLoginFlow');\n        return;\n      }\n    }\n\n    // Build options to invoke or throw error for invalid action\n    if (FORMS.LAUNCH_AUTHENTICATOR === actionPath && actionParams) {\n      //https://oktainc.atlassian.net/browse/OKTA-562885  a temp solution to send rememberMe when click the launch OV buttion.\n      //will redesign to handle FastPass silent probing case where no username and rememberMe opiton at all.\n      invokeOptions = {\n        ...invokeOptions,\n        actions: [{\n          name: actionPath,\n          params: actionParams\n        }]\n      };\n    } else if (idx['neededToProceed'].find(item => item.name === actionPath)) {\n      invokeOptions = { ...invokeOptions, step: actionPath };\n    } else if (_.isFunction(idx['actions'][actionPath])) {\n      invokeOptions = {\n        ...invokeOptions,\n        actions: [{\n          name: actionPath,\n          params: actionParams\n        }]\n      };\n    } else {\n      error = new ConfigError(`Invalid action selected: ${actionPath}`);\n      this.options.settings.callGlobalError(error);\n      await this.showFormErrors(this.formView.model, error, this.formView.form);\n      return;\n    }\n\n    // action will be executed asynchronously\n    await this.invokeAction(invokeOptions);\n  },\n\n  async invokeAction(invokeOptions) {\n    const authClient = this.options.settings.getAuthClient();\n    let resp;\n    let error;\n    try {\n      resp = await authClient.idx.proceed(invokeOptions);\n      if (resp.requestDidSucceed === false) {\n        error = resp;\n      }\n    } catch (e) {\n      error = e;\n    }\n\n    // if request did not succeed, show error on the current form\n    if (error) {\n      await this.showFormErrors(this.formView.model, error, this.formView.form);\n      return;\n    }\n\n    // process response, may render a new form\n    await this.handleIdxResponse(resp);\n  },\n\n  // eslint-disable-next-line max-statements, complexity\n  async handleSaveForm(model) {\n    const formName = model.get('formName');\n\n    // Toggle Form saving status (e.g. disabling save button, etc)\n    this.toggleFormButtonState(true);\n    model.trigger('request');\n\n    // Use full page redirection if necessary\n    if (model.get('useRedirect')) {\n      // Clear when navigates away from SIW page, e.g. success, IdP Authenticator.\n      // Because SIW sort of finished its current /transaction/\n      sessionStorageHelper.removeStateHandle();\n\n      // OKTA-635926: do not redirect without user gesture for ov enrollment on android\n      // if Util.isAndroidOVEnrollment() returns true we use a user gesture to complete the redirect in AutoRedirectView\n      if (!Util.isAndroidOVEnrollment()) {\n        const currentViewState = this.options.appState.getCurrentViewState();\n        Util.redirectWithFormGet(currentViewState.href);\n      }\n\n      return;\n    }\n\n    const payload = transformPayload(formName, model);\n    // Run hook: transform the user name (a.k.a identifier)\n    const values = this.transformIdentifier(formName, payload);\n\n    // widget rememberMe feature stores the entered identifier in a cookie, to pre-fill the form on subsequent visits to page\n    if (this.options.settings.get('features.rememberMe')) {\n      if (values.identifier) {\n        CookieUtil.setUsernameCookie(values.identifier);\n      }\n    }\n    else {\n      CookieUtil.removeUsernameCookie();\n    }\n\n    // Error out when this is not a remediation form. Unexpected Exception.\n    if (!this.options.appState.hasRemediationObject(formName)) {\n      this.options.settings.callGlobalError(`Cannot find http action for \"${formName}\".`);\n      await this.showFormErrors(this.formView.model, 'Cannot find action to proceed.', this.formView.form);\n      return;\n    }\n\n    // Reset password in identity-first flow needs some help to auto-select password and begin the reset flow\n    if (formName === 'identify' && this.options.settings.get('flow') === CONFIGURED_FLOW.RESET_PASSWORD) {\n      values.authenticator = 'okta_password';\n    }\n\n    // Submit request to idx endpoint\n    const authClient = this.options.settings.getAuthClient();\n    const idxOptions: ProceedOptions = {\n      exchangeCodeForTokens: false, // we handle this in interactionCodeFlow.js\n    };\n    try {\n      const idx = this.options.appState.get('idx');\n      const { stateHandle } = idx.context;\n      const resp = await authClient.idx.proceed({\n        ...idxOptions,\n        step: formName,\n        stateHandle,\n        ...values\n      });\n\n      if (resp.status === IdxStatus.FAILURE) {\n        throw resp.error; // caught and handled in this function\n      }\n      // follow idx transaction to render terminal view for session expired error\n      if (IonResponseHelper.isIdxSessionExpiredError(resp)) {\n        const authClient = this.settings.getAuthClient();\n        authClient.transactionManager.clear();\n        await this.handleIdxResponse(resp);\n        return;\n      }\n      // If the last request did not succeed, show errors on the current form\n      // Special case: Okta server responds 401 status code with WWW-Authenticate header and new remediation\n      // so that the iOS/MacOS credential SSO extension (Okta Verify) can intercept\n      // the response reaches here when Okta Verify is not installed\n      // we need to return an idx object so that\n      // the SIW can proceed to the next step without showing error\n      if (resp.requestDidSucceed === false && !resp.stepUp) {\n        await this.showFormErrors(model, resp, this.formView.form);\n        return;\n      }\n      const onSuccess = this.handleIdxResponse.bind(this, resp);\n      if (formName === FORMS.ENROLL_PROFILE) {\n        // call registration (aka enroll profile) hook\n        this.settings.postRegistrationSubmit(values?.userProfile?.email, onSuccess, (error) => {\n          model.trigger('error', model, {\n            responseJSON: error,\n          });\n        });\n      } else {\n        await onSuccess();\n      }\n    } catch(error) {\n      if (error.is?.('terminal')) {\n        this.options.appState.setNonIdxError(error);\n      } else {\n        await this.showFormErrors(model, error, this.formView.form);\n      }\n    } finally {\n      this.toggleFormButtonState(false);\n    }\n  },\n\n  transformIdentifier(formName, modelJSON) {\n    if (Object.prototype.hasOwnProperty.call(modelJSON, 'identifier')) {\n      // The callback function is passed two arguments:\n      // 1) username: The name entered by the user\n      // 2) operation: The type of operation the user is trying to perform:\n      //      - PRIMARY_AUTH\n      //      - FORGOT_PASSWORD\n      //      - UNLOCK_ACCOUNT\n      const operation = FORM_NAME_TO_OPERATION_MAP[formName];\n      modelJSON.identifier = this.settings.transformUsername(modelJSON.identifier, operation);\n    }\n    return modelJSON;\n  },\n\n  /**\n   * @param model current form model\n   * @param error any errors after user action\n   * @param form current form\n   * Handle errors that get displayed right after any user action. After such form errors widget doesn't\n   * reload or re-render, but updates the AppSate with latest remediation.\n   */\n  async showFormErrors(model, error, form) {\n    /* eslint max-statements: [2, 24] */\n    let errorObj;\n    let idxStateError;\n    let showErrorBanner = true;\n    model.trigger('clearFormError');\n\n    if (!error) {\n      error = 'FormController - unknown error found';\n      this.options.settings.callGlobalError(error);\n    }\n\n    if(error?.rawIdxState) {\n      idxStateError = error;\n      error = error.rawIdxState;\n    }\n\n    if (IonResponseHelper.isIonErrorResponse(error)) {\n      errorObj = IonResponseHelper.convertFormErrors(error);\n    } else if (error.errorSummary) {\n      errorObj = { responseJSON: error };\n    } else {\n      Util.logConsoleError(error);\n      errorObj = { responseJSON: { errorSummary: loc('error.unsupported.response', 'login')}};\n    }\n\n    if(_.isFunction(form?.showCustomFormErrorCallout)) {\n      showErrorBanner = !form.showCustomFormErrorCallout(errorObj, idxStateError.messages);\n    }\n\n    // show error before updating app state.\n    model.trigger('error', model, errorObj, showErrorBanner);\n    idxStateError = Object.assign({}, idxStateError, {hasFormError: true});\n\n    // TODO OKTA-408410: Widget should update the state on every new response. It should NOT do selective update.\n    // For eg 429 rate-limit errors, we have to skip updating idx state, because error response is not an idx response.\n    if (Array.isArray(idxStateError?.neededToProceed) && idxStateError?.neededToProceed.length) {\n      await this.handleIdxResponse(idxStateError);\n    }\n  },\n\n  async handleIdxResponse(idxResp) {\n    await updateAppState(this.options.appState, idxResp);\n  },\n\n  /**\n   * SignIn widget has its own (hacky) way to customize the button disabled state:\n   * adding `link-button-disabled` despite the name was intend only to disable\n   * `link-button`.\n   * Instead of doing decent refactor, we want to follow the convention for now.\n   *\n   * @param {boolean} disabled whether add extra disable CSS class.\n   */\n  toggleFormButtonState: function(disabled) {\n    const button = this.$el.find('.o-form-button-bar .button');\n    button.toggleClass('link-button-disabled', disabled);\n  },\n});\n","/*!\n * Copyright (c) 2020, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { AbstractRouter } from 'types';\nimport BaseLoginRouter, { BaseLoginRouterOptions } from './BaseLoginRouter';\nimport FormController from './controllers/FormController';\n\nconst routes = {\n  '': 'defaultAuth',\n  '*wildcard': 'defaultAuth',\n};\n\nexport default class WidgetRouter extends BaseLoginRouter implements AbstractRouter {\n  constructor(options: BaseLoginRouterOptions) {\n    super({ routes, ...options });\n  }\n\n  defaultAuth() {\n    this.render(FormController);\n  }\n}\n","\n// Default router factory will detect between classic and OIE pipeline\nimport Util from 'util/Util';\nimport V1Router from 'v1/LoginRouter';\nimport V2Router from 'v2/WidgetRouter';\n\nimport { RouterConstructor, WidgetOptions } from 'types';\n\n\nexport function routerClassFactory(options: WidgetOptions) {\n  let Router: RouterConstructor;\n\n  // V1 (\"classic\") flow will load under these conditions:\n  const v1DefaultFlow = (!options.stateToken && !options.clientId && !options.proxyIdxResponse); // Default entry flow on okta-hosted login page\n  const v1StateTokenFlow = options.stateToken && Util.isV1StateToken(options.stateToken); // Resuming a flow on okta-hosted login page\n  const v1AuthFlow = (options.clientId && options.useClassicEngine === true); // Self hosted widget can set the `useClassicEngine` option to use V1Router\n\n  if (v1DefaultFlow || v1StateTokenFlow || v1AuthFlow) {\n    Router = V1Router;\n  } else {\n    Router = V2Router;\n  }\n  return Router;\n}\n","import { _, $ } from '@okta/courage';\nimport { ConfigError } from 'util/Errors';\nimport OAuth2Util from 'util/OAuth2Util';\n\nexport default function buildRenderOptions(widgetOptions = {}, options = {}) {\n  const authParams = $.extend(true, {}, widgetOptions.authParams, _.pick(options, OAuth2Util.AUTH_PARAMS));\n  const { el, clientId, redirectUri } = Object.assign({}, widgetOptions, options);\n  const renderOptions = Object.assign({}, { el, clientId, redirectUri, authParams });\n\n  if (!renderOptions.el) {\n    throw new ConfigError('\"el\" is required');\n  }\n\n  if (!renderOptions.clientId) {\n    throw new ConfigError('\"clientId\" is required');\n  }\n\n  if (!renderOptions.redirectUri) {\n    throw new ConfigError('\"redirectUri\" is required');\n  }\n\n  return renderOptions;\n}","/*!\n * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { Model } from '@okta/courage';\nimport { mergeHook } from 'util/Hooks';\nimport { HookDefinition, HooksOptions } from 'types';\n\nexport default class Hooks extends Model {\n\n  mergeHook(formName: string, hookToMerge: HookDefinition): void {\n    const hooks = this.get('hooks') || {};\n    mergeHook(hooks, formName, hookToMerge);\n    this.set('hooks', hooks);\n  }\n\n  getHook(formName: string): HookDefinition {\n    const hooks: HooksOptions = this.get('hooks') || {};\n    return hooks[formName]; // may be undefined\n  }\n  \n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ConfigError } from 'util/Errors';\nimport Util from 'util/Util';\nimport Logger from 'util/Logger';\nimport getAuthClient from 'widget/getAuthClient';\nimport buildRenderOptions from 'widget/buildRenderOptions';\nimport createRouter from 'widget/createRouter';\nimport Hooks from 'models/Hooks';\nimport {\n  WidgetOptions,\n  WidgetOktaAuthConstructor,\n  WidgetOktaAuthInterface,\n  OktaSignInAPI,\n  RenderSuccessCallback,\n  RenderErrorCallback,\n  RenderResult,\n  RenderOptions,\n  HookFunction,\n  RenderResultSuccess,\n  EventCallback,\n  EventCallbackWithError,\n  EventName,\n  RouterClassFactory,\n  AbstractRouter,\n  RouterConstructor,\n  OktaData,\n} from '../types';\nimport { Tokens } from '@okta/okta-auth-js';\n\nconst EVENTS_LIST = ['ready', 'afterError', 'afterRender'];\ndeclare global {\n  interface Window {\n    oktaData?: OktaData;\n  }\n}\n\nexport function createOktaSignIn\n(\n  authClientConstructor: WidgetOktaAuthConstructor,\n  routerClassFactory: RouterClassFactory\n)\n{\n  return class OktaSignIn implements OktaSignInAPI {\n    Router: RouterConstructor;\n    options: WidgetOptions;\n    hooks: Hooks;\n    router: AbstractRouter;\n    authClient: WidgetOktaAuthInterface;\n    // Map original event handler to wrapped one\n    _eventCallbackMap: WeakMap<EventCallback | EventCallbackWithError, EventCallback | EventCallbackWithError>;\n\n    constructor(options: WidgetOptions) {\n      Util.debugMessage(`\n          The Okta Sign-In Widget is running in development mode.\n          When you are ready to publish your app, embed the minified version to turn on production mode.\n          See: https://developer.okta.com/code/javascript/okta_sign-in_widget#cdn\n        `);\n      if (!options.stateToken) {\n        // need to set stateToken here vs in Settings to determine Router.\n        // oktaData is only available to SIW on custom domains.\n        // set stateToken in case user wipes out stateToken when overriding options.\n        options.stateToken = window?.oktaData?.signIn?.stateToken;\n      }\n      this.options = options;\n      this.authClient = getAuthClient(authClientConstructor, options);\n\n      // validate authClient configuration against widget options\n      if (options.useClassicEngine !== true && this.authClient.options.clientId && this.authClient.isPKCE() === false) {\n        throw new ConfigError(\n          'OAuth2 with interaction code flow requires PKCE to be enabled on the authClient.'\n        );\n      }\n\n      // Hooks can be modified before or after render\n      this.hooks = new Hooks({\n        hooks: options.hooks\n      });\n\n      this.Router = routerClassFactory(options);\n\n      this._eventCallbackMap = new WeakMap();\n\n      // Triggers the event up the chain so it is available to the consumers of the widget.\n      this.Router.prototype.Events.listenTo.call(this, this.Router.prototype, 'all', this.trigger);\n\n      // On the first afterRender event (usually when the Widget is ready) - emit a 'ready' event\n      this.once('afterRender', function(context) {\n        this.trigger('ready', context);\n      });\n    }\n\n    /**\n     * Render the sign in widget to an element. Returns a promise that will resolve on success or reject on error.\n     * @param options - options for the signin widget.\n     *        Must have an el or $el property to render the widget to.\n     * @param success - success callback function\n     * @param error - error callback function\n     */\n    renderEl(renderOptions: RenderOptions, successFn?: RenderSuccessCallback, errorFn?: RenderErrorCallback): Promise<RenderResult> {\n      if (this.router) {\n        throw new Error('An instance of the widget has already been rendered. Call remove() first.');\n      }\n\n      const res = createRouter(this.Router, this.options, renderOptions, this.authClient, successFn, errorFn, this.hooks);\n      this.router = res.router;\n      return res.promise;\n    }\n\n    \n    hide(): void {\n      if (this.router) {\n        this.router.hide();\n      }\n    }\n\n    show(): void {\n      if (this.router) {\n        this.router.show();\n      }\n    }\n\n    remove(): void {\n      if (this.router) {\n        this.router.remove();\n        this.router = undefined;\n      }\n    }\n\n    /**\n     * Renders the Widget and returns a promise that resolves to OAuth tokens\n     * @param options - options for the signin widget\n     */\n    showSignInToGetTokens(options?: RenderOptions): Promise<Tokens> {\n      const renderOptions = Object.assign(buildRenderOptions(this.options, options), {\n        redirect: 'never'\n      });\n      const promise = this.renderEl(renderOptions).then(res => {\n        return (res as RenderResultSuccess).tokens;\n      });\n      const authClient = this.router.settings.getAuthClient();\n      if (authClient.isAuthorizationCodeFlow() && !authClient.isPKCE()) {\n        throw new ConfigError('\"showSignInToGetTokens()\" should not be used for authorization_code flow. ' + \n          'Use \"showSignInAndRedirect()\" instead');\n      }\n      return promise;\n    }\n\n    /**\n     * Renders the widget and redirects to the OAuth callback\n     * @param options - options for the signin widget\n     */\n    showSignInAndRedirect(options?: RenderOptions): Promise<void> {\n      const renderOptions = Object.assign(buildRenderOptions(this.options, options), {\n        redirect: 'always'\n      });\n      return this.renderEl(renderOptions).then(() => {\n        // This method should never return, it will either redirect or reject with error\n        return;\n      });\n    }\n\n    /**\n     * Renders the widget. Either resolves the returned promise, or redirects.\n     * @param options - options for the signin widget\n     */\n    showSignIn(options?: RenderOptions): Promise<RenderResult> {\n      const renderOptions = Object.assign(buildRenderOptions(this.options, options));\n      return this.renderEl(renderOptions);\n    }\n\n    // Hook convenience functions\n    before(formName: string, callbackFn: HookFunction): void {\n      this.hooks.mergeHook(formName, {\n        before: [\n          callbackFn\n        ]\n      });\n    }\n\n    after(formName: string, callbackFn: HookFunction): void {\n      this.hooks.mergeHook(formName, {\n        after: [\n          callbackFn\n        ]\n      });\n    }\n\n    getUser(): any {\n      return this.router?.appState?.getUser();\n    }\n    \n    // Events API\n\n    on(event: EventName, callback: EventCallback | EventCallbackWithError): void {\n      // custom events listener on widget instance to trap third-party callback errors\n      if (EVENTS_LIST.includes(event)) {\n        const origCallback = callback;\n        callback = function(...callbackArgs) {\n          try {\n            origCallback.apply(this, callbackArgs);\n          } catch (err) {\n            Logger.error(`[okta-signin-widget] \"${event}\" event handler error:`, err);\n          }\n        };\n        this._eventCallbackMap.set(origCallback, callback);\n      }\n      this.Router.prototype.Events.on.call(this, event, callback);\n    }\n\n    off(event?: EventName, callback?: EventCallback | EventCallbackWithError): void {\n      if (callback) {\n        callback = this._eventCallbackMap.get(callback) || callback;\n      }\n      this.Router.prototype.Events.off.call(this, event, callback);\n    }\n\n    once(event: EventName, callback: EventCallback): void {\n      this.Router.prototype.Events.once.call(this, event, callback);\n    }\n\n    stopListening(event?: EventName, callback?: EventCallback): void {\n      this.Router.prototype.Events.stopListening.call(this, event, callback);\n    }\n\n    listenTo(object: any, event: EventName, callback: EventCallback): void {\n      this.Router.prototype.Events.listenTo.call(this, object, event, callback);\n    }\n\n    trigger(event: EventName, ...args: any[]): void {\n      this.Router.prototype.Events.trigger.apply(this, [event, ...args]);\n    }\n\n  };\n}\n","// Default supports both IDX and Authn pipelines\nimport { OktaAuth } from '../authClient/default';\nimport { routerClassFactory } from '../router/default';\nimport { WidgetOptions } from '../types/options';\nimport { createOktaSignIn } from '../widget/OktaSignIn';\n\nclass OktaSignIn extends createOktaSignIn(OktaAuth, routerClassFactory) {\n  constructor(options: WidgetOptions) {\n    super(options);\n  }\n}\n\nexport default OktaSignIn\nexport { OktaSignIn }\nexport * from '../types';\n","import { ConfigError } from 'util/Errors';\nimport Util from 'util/Util';\nimport config from 'config/config.json';\nimport { WidgetOptions, WidgetOktaAuthConstructor, WidgetOktaAuthInterface } from 'types';\n\nexport default function getAuthClientInstance(\n  OktaAuth: WidgetOktaAuthConstructor,\n  options: WidgetOptions = {}\n): WidgetOktaAuthInterface\n{\n  // if authClient is set, authParams are disregarded\n  let { authClient, authParams } = options;\n\n  if (!authClient) {\n    // Create an authClient using widget options and optional authParams\n    const {\n      issuer,\n      clientId,\n      redirectUri,\n      state,\n      scopes,\n      flow,\n      codeChallenge,\n      codeChallengeMethod,\n      recoveryToken\n    } = options;\n    authParams = {\n      issuer,\n      clientId,\n      redirectUri,\n      state,\n      scopes,\n      flow,\n      codeChallenge,\n      codeChallengeMethod,\n      transformErrorXHR: Util.transformErrorXHR,\n      recoveryToken,\n      ...authParams\n    };\n\n    if (!authParams.issuer) {\n      authParams.issuer = options.baseUrl + '/oauth2/default';\n    }\n\n    authClient = new OktaAuth(authParams);\n  }\n\n  // Add widget version to extended user agent header\n  if (!authClient._oktaUserAgent) {\n    throw new ConfigError('The passed in authClient should be version 5.4.0 or above.');\n  } else {\n    authClient._oktaUserAgent.addEnvironment(`okta-signin-widget-${config.version}`);\n  }\n\n  return authClient;\n}\n","import { $ } from '@okta/courage';\nimport Enums from 'util/Enums';\n\nexport default function createRouter(Router, widgetOptions, renderOptions, authClient, successFn, errorFn, hooks) {\n  let resolve;\n  let reject;\n  const promise = new Promise((_resolve, _reject) => {\n    resolve = _resolve;\n    reject = _reject;\n  });\n  const routerOptions = $.extend(true, {}, widgetOptions, renderOptions, {\n    authClient,\n    hooks,\n    globalSuccessFn: (res) => {\n      successFn && successFn(res); // call success function if provided\n      if (res && res.status === Enums.SUCCESS) {\n        resolve(res);\n      }\n    },\n    globalErrorFn: (error) => {\n      errorFn && errorFn(error); // call error function if provided\n      reject(error);\n    }\n  });\n  const router = new Router(routerOptions);\n  router.start();\n  return {\n    router,\n    routerOptions,\n    promise\n  };\n}\n\n","'use strict';\n\nconst converters = {\n\tdays: value => value * 864e5,\n\thours: value => value * 36e5,\n\tminutes: value => value * 6e4,\n\tseconds: value => value * 1e3,\n\tmilliseconds: value => value,\n\tmicroseconds: value => value / 1e3,\n\tnanoseconds: value => value / 1e6\n};\n\nconst toMilliseconds = object => Object.entries(object).reduce((milliseconds, [key, value]) => {\n\tif (typeof value !== 'number') {\n\t\tthrow new TypeError(`Expected a \\`number\\` for key \\`${key}\\`, got \\`${value}\\` (${typeof value})`);\n\t}\n\n\tif (!converters[key]) {\n\t\tthrow new Error('Unsupported time key');\n\t}\n\n\treturn milliseconds + converters[key](value);\n}, 0);\n\nmodule.exports = toMilliseconds;\n// TODO: remove this for next major version\nmodule.exports.default = toMilliseconds;\n","(function (global, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define(['module', 'select'], factory);\n    } else if (typeof exports !== \"undefined\") {\n        factory(module, require('select'));\n    } else {\n        var mod = {\n            exports: {}\n        };\n        factory(mod, global.select);\n        global.clipboardAction = mod.exports;\n    }\n})(this, function (module, _select) {\n    'use strict';\n\n    var _select2 = _interopRequireDefault(_select);\n\n    function _interopRequireDefault(obj) {\n        return obj && obj.__esModule ? obj : {\n            default: obj\n        };\n    }\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n        return typeof obj;\n    } : function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    function _classCallCheck(instance, Constructor) {\n        if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n        }\n    }\n\n    var _createClass = function () {\n        function defineProperties(target, props) {\n            for (var i = 0; i < props.length; i++) {\n                var descriptor = props[i];\n                descriptor.enumerable = descriptor.enumerable || false;\n                descriptor.configurable = true;\n                if (\"value\" in descriptor) descriptor.writable = true;\n                Object.defineProperty(target, descriptor.key, descriptor);\n            }\n        }\n\n        return function (Constructor, protoProps, staticProps) {\n            if (protoProps) defineProperties(Constructor.prototype, protoProps);\n            if (staticProps) defineProperties(Constructor, staticProps);\n            return Constructor;\n        };\n    }();\n\n    var ClipboardAction = function () {\n        /**\n         * @param {Object} options\n         */\n        function ClipboardAction(options) {\n            _classCallCheck(this, ClipboardAction);\n\n            this.resolveOptions(options);\n            this.initSelection();\n        }\n\n        /**\n         * Defines base properties passed from constructor.\n         * @param {Object} options\n         */\n\n\n        _createClass(ClipboardAction, [{\n            key: 'resolveOptions',\n            value: function resolveOptions() {\n                var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n                this.action = options.action;\n                this.container = options.container;\n                this.emitter = options.emitter;\n                this.target = options.target;\n                this.text = options.text;\n                this.trigger = options.trigger;\n\n                this.selectedText = '';\n            }\n        }, {\n            key: 'initSelection',\n            value: function initSelection() {\n                if (this.text) {\n                    this.selectFake();\n                } else if (this.target) {\n                    this.selectTarget();\n                }\n            }\n        }, {\n            key: 'selectFake',\n            value: function selectFake() {\n                var _this = this;\n\n                var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n                this.removeFake();\n\n                this.fakeHandlerCallback = function () {\n                    return _this.removeFake();\n                };\n                this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n                this.fakeElem = document.createElement('textarea');\n                // Prevent zooming on iOS\n                this.fakeElem.style.fontSize = '12pt';\n                // Reset box model\n                this.fakeElem.style.border = '0';\n                this.fakeElem.style.padding = '0';\n                this.fakeElem.style.margin = '0';\n                // Move element out of screen horizontally\n                this.fakeElem.style.position = 'absolute';\n                this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n                // Move element to the same position vertically\n                var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n                this.fakeElem.style.top = yPosition + 'px';\n\n                this.fakeElem.setAttribute('readonly', '');\n                this.fakeElem.value = this.text;\n\n                this.container.appendChild(this.fakeElem);\n\n                this.selectedText = (0, _select2.default)(this.fakeElem);\n                this.copyText();\n            }\n        }, {\n            key: 'removeFake',\n            value: function removeFake() {\n                if (this.fakeHandler) {\n                    this.container.removeEventListener('click', this.fakeHandlerCallback);\n                    this.fakeHandler = null;\n                    this.fakeHandlerCallback = null;\n                }\n\n                if (this.fakeElem) {\n                    this.container.removeChild(this.fakeElem);\n                    this.fakeElem = null;\n                }\n            }\n        }, {\n            key: 'selectTarget',\n            value: function selectTarget() {\n                this.selectedText = (0, _select2.default)(this.target);\n                this.copyText();\n            }\n        }, {\n            key: 'copyText',\n            value: function copyText() {\n                var succeeded = void 0;\n\n                try {\n                    succeeded = document.execCommand(this.action);\n                } catch (err) {\n                    succeeded = false;\n                }\n\n                this.handleResult(succeeded);\n            }\n        }, {\n            key: 'handleResult',\n            value: function handleResult(succeeded) {\n                this.emitter.emit(succeeded ? 'success' : 'error', {\n                    action: this.action,\n                    text: this.selectedText,\n                    trigger: this.trigger,\n                    clearSelection: this.clearSelection.bind(this)\n                });\n            }\n        }, {\n            key: 'clearSelection',\n            value: function clearSelection() {\n                if (this.trigger) {\n                    this.trigger.focus();\n                }\n\n                window.getSelection().removeAllRanges();\n            }\n        }, {\n            key: 'destroy',\n            value: function destroy() {\n                this.removeFake();\n            }\n        }, {\n            key: 'action',\n            set: function set() {\n                var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n                this._action = action;\n\n                if (this._action !== 'copy' && this._action !== 'cut') {\n                    throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n                }\n            },\n            get: function get() {\n                return this._action;\n            }\n        }, {\n            key: 'target',\n            set: function set(target) {\n                if (target !== undefined) {\n                    if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n                        if (this.action === 'copy' && target.hasAttribute('disabled')) {\n                            throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n                        }\n\n                        if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n                            throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n                        }\n\n                        this._target = target;\n                    } else {\n                        throw new Error('Invalid \"target\" value, use a valid Element');\n                    }\n                }\n            },\n            get: function get() {\n                return this._target;\n            }\n        }]);\n\n        return ClipboardAction;\n    }();\n\n    module.exports = ClipboardAction;\n});","(function (global, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n    } else if (typeof exports !== \"undefined\") {\n        factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n    } else {\n        var mod = {\n            exports: {}\n        };\n        factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n        global.clipboard = mod.exports;\n    }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n    'use strict';\n\n    var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n    var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n    var _goodListener2 = _interopRequireDefault(_goodListener);\n\n    function _interopRequireDefault(obj) {\n        return obj && obj.__esModule ? obj : {\n            default: obj\n        };\n    }\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n        return typeof obj;\n    } : function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    function _classCallCheck(instance, Constructor) {\n        if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n        }\n    }\n\n    var _createClass = function () {\n        function defineProperties(target, props) {\n            for (var i = 0; i < props.length; i++) {\n                var descriptor = props[i];\n                descriptor.enumerable = descriptor.enumerable || false;\n                descriptor.configurable = true;\n                if (\"value\" in descriptor) descriptor.writable = true;\n                Object.defineProperty(target, descriptor.key, descriptor);\n            }\n        }\n\n        return function (Constructor, protoProps, staticProps) {\n            if (protoProps) defineProperties(Constructor.prototype, protoProps);\n            if (staticProps) defineProperties(Constructor, staticProps);\n            return Constructor;\n        };\n    }();\n\n    function _possibleConstructorReturn(self, call) {\n        if (!self) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n        }\n\n        return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n    }\n\n    function _inherits(subClass, superClass) {\n        if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n        }\n\n        subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n                value: subClass,\n                enumerable: false,\n                writable: true,\n                configurable: true\n            }\n        });\n        if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n    }\n\n    var Clipboard = function (_Emitter) {\n        _inherits(Clipboard, _Emitter);\n\n        /**\n         * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n         * @param {Object} options\n         */\n        function Clipboard(trigger, options) {\n            _classCallCheck(this, Clipboard);\n\n            var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n            _this.resolveOptions(options);\n            _this.listenClick(trigger);\n            return _this;\n        }\n\n        /**\n         * Defines if attributes would be resolved using internal setter functions\n         * or custom functions that were passed in the constructor.\n         * @param {Object} options\n         */\n\n\n        _createClass(Clipboard, [{\n            key: 'resolveOptions',\n            value: function resolveOptions() {\n                var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n                this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n                this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n                this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n                this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n            }\n        }, {\n            key: 'listenClick',\n            value: function listenClick(trigger) {\n                var _this2 = this;\n\n                this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n                    return _this2.onClick(e);\n                });\n            }\n        }, {\n            key: 'onClick',\n            value: function onClick(e) {\n                var trigger = e.delegateTarget || e.currentTarget;\n\n                if (this.clipboardAction) {\n                    this.clipboardAction = null;\n                }\n\n                this.clipboardAction = new _clipboardAction2.default({\n                    action: this.action(trigger),\n                    target: this.target(trigger),\n                    text: this.text(trigger),\n                    container: this.container,\n                    trigger: trigger,\n                    emitter: this\n                });\n            }\n        }, {\n            key: 'defaultAction',\n            value: function defaultAction(trigger) {\n                return getAttributeValue('action', trigger);\n            }\n        }, {\n            key: 'defaultTarget',\n            value: function defaultTarget(trigger) {\n                var selector = getAttributeValue('target', trigger);\n\n                if (selector) {\n                    return document.querySelector(selector);\n                }\n            }\n        }, {\n            key: 'defaultText',\n            value: function defaultText(trigger) {\n                return getAttributeValue('text', trigger);\n            }\n        }, {\n            key: 'destroy',\n            value: function destroy() {\n                this.listener.destroy();\n\n                if (this.clipboardAction) {\n                    this.clipboardAction.destroy();\n                    this.clipboardAction = null;\n                }\n            }\n        }], [{\n            key: 'isSupported',\n            value: function isSupported() {\n                var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n                var actions = typeof action === 'string' ? [action] : action;\n                var support = !!document.queryCommandSupported;\n\n                actions.forEach(function (action) {\n                    support = support && !!document.queryCommandSupported(action);\n                });\n\n                return support;\n            }\n        }]);\n\n        return Clipboard;\n    }(_tinyEmitter2.default);\n\n    /**\n     * Helper function to retrieve attribute value.\n     * @param {String} suffix\n     * @param {Element} element\n     */\n    function getAttributeValue(suffix, element) {\n        var attribute = 'data-clipboard-' + suffix;\n\n        if (!element.hasAttribute(attribute)) {\n            return;\n        }\n\n        return element.getAttribute(attribute);\n    }\n\n    module.exports = Clipboard;\n});","function E () {\n  // Keep this empty so it's easier to inherit from\n  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n  on: function (name, callback, ctx) {\n    var e = this.e || (this.e = {});\n\n    (e[name] || (e[name] = [])).push({\n      fn: callback,\n      ctx: ctx\n    });\n\n    return this;\n  },\n\n  once: function (name, callback, ctx) {\n    var self = this;\n    function listener () {\n      self.off(name, listener);\n      callback.apply(ctx, arguments);\n    };\n\n    listener._ = callback\n    return this.on(name, listener, ctx);\n  },\n\n  emit: function (name) {\n    var data = [].slice.call(arguments, 1);\n    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n    var i = 0;\n    var len = evtArr.length;\n\n    for (i; i < len; i++) {\n      evtArr[i].fn.apply(evtArr[i].ctx, data);\n    }\n\n    return this;\n  },\n\n  off: function (name, callback) {\n    var e = this.e || (this.e = {});\n    var evts = e[name];\n    var liveEvents = [];\n\n    if (evts && callback) {\n      for (var i = 0, len = evts.length; i < len; i++) {\n        if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n          liveEvents.push(evts[i]);\n      }\n    }\n\n    // Remove event from queue to prevent memory leak\n    // Suggested by https://github.com/lazd\n    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n    (liveEvents.length)\n      ? e[name] = liveEvents\n      : delete e[name];\n\n    return this;\n  }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob:\n      'FileReader' in self &&\n      'Blob' in self &&\n      (function() {\n        try {\n          new Blob();\n          return true\n        } catch (e) {\n          return false\n        }\n      })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  };\n\n  function isDataView(obj) {\n    return obj && DataView.prototype.isPrototypeOf(obj)\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ];\n\n    var isArrayBufferView =\n      ArrayBuffer.isView ||\n      function(obj) {\n        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n      };\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name);\n    }\n    if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value);\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift();\n        return {done: value === undefined, value: value}\n      }\n    };\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      };\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {};\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value);\n      }, this);\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1]);\n      }, this);\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name]);\n      }, this);\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name);\n    value = normalizeValue(value);\n    var oldValue = this.map[name];\n    this.map[name] = oldValue ? oldValue + ', ' + value : value;\n  };\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)];\n  };\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name);\n    return this.has(name) ? this.map[name] : null\n  };\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  };\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value);\n  };\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this);\n      }\n    }\n  };\n\n  Headers.prototype.keys = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push(name);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.values = function() {\n    var items = [];\n    this.forEach(function(value) {\n      items.push(value);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.entries = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push([name, value]);\n    });\n    return iteratorFor(items)\n  };\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true;\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result);\n      };\n      reader.onerror = function() {\n        reject(reader.error);\n      };\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsArrayBuffer(blob);\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsText(blob);\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf);\n    var chars = new Array(view.length);\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i]);\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength);\n      view.set(new Uint8Array(buf));\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false;\n\n    this._initBody = function(body) {\n      this._bodyInit = body;\n      if (!body) {\n        this._bodyText = '';\n      } else if (typeof body === 'string') {\n        this._bodyText = body;\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body;\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body;\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString();\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer);\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer]);\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body);\n      } else {\n        this._bodyText = body = Object.prototype.toString.call(body);\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8');\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type);\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n        }\n      }\n    };\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this);\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      };\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      };\n    }\n\n    this.text = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    };\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      };\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    };\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase();\n    return methods.indexOf(upcased) > -1 ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {};\n    var body = options.body;\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url;\n      this.credentials = input.credentials;\n      if (!options.headers) {\n        this.headers = new Headers(input.headers);\n      }\n      this.method = input.method;\n      this.mode = input.mode;\n      this.signal = input.signal;\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit;\n        input.bodyUsed = true;\n      }\n    } else {\n      this.url = String(input);\n    }\n\n    this.credentials = options.credentials || this.credentials || 'same-origin';\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers);\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET');\n    this.mode = options.mode || this.mode || null;\n    this.signal = options.signal || this.signal;\n    this.referrer = null;\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body);\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, {body: this._bodyInit})\n  };\n\n  function decode(body) {\n    var form = new FormData();\n    body\n      .trim()\n      .split('&')\n      .forEach(function(bytes) {\n        if (bytes) {\n          var split = bytes.split('=');\n          var name = split.shift().replace(/\\+/g, ' ');\n          var value = split.join('=').replace(/\\+/g, ' ');\n          form.append(decodeURIComponent(name), decodeURIComponent(value));\n        }\n      });\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers();\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':');\n      var key = parts.shift().trim();\n      if (key) {\n        var value = parts.join(':').trim();\n        headers.append(key, value);\n      }\n    });\n    return headers\n  }\n\n  Body.call(Request.prototype);\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {};\n    }\n\n    this.type = 'default';\n    this.status = options.status === undefined ? 200 : options.status;\n    this.ok = this.status >= 200 && this.status < 300;\n    this.statusText = 'statusText' in options ? options.statusText : 'OK';\n    this.headers = new Headers(options.headers);\n    this.url = options.url || '';\n    this._initBody(bodyInit);\n  }\n\n  Body.call(Response.prototype);\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  };\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''});\n    response.type = 'error';\n    return response\n  };\n\n  var redirectStatuses = [301, 302, 303, 307, 308];\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  };\n\n  exports.DOMException = self.DOMException;\n  try {\n    new exports.DOMException();\n  } catch (err) {\n    exports.DOMException = function(message, name) {\n      this.message = message;\n      this.name = name;\n      var error = Error(message);\n      this.stack = error.stack;\n    };\n    exports.DOMException.prototype = Object.create(Error.prototype);\n    exports.DOMException.prototype.constructor = exports.DOMException;\n  }\n\n  function fetch(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init);\n\n      if (request.signal && request.signal.aborted) {\n        return reject(new exports.DOMException('Aborted', 'AbortError'))\n      }\n\n      var xhr = new XMLHttpRequest();\n\n      function abortXhr() {\n        xhr.abort();\n      }\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        };\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n        var body = 'response' in xhr ? xhr.response : xhr.responseText;\n        resolve(new Response(body, options));\n      };\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.onabort = function() {\n        reject(new exports.DOMException('Aborted', 'AbortError'));\n      };\n\n      xhr.open(request.method, request.url, true);\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true;\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false;\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob';\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value);\n      });\n\n      if (request.signal) {\n        request.signal.addEventListener('abort', abortXhr);\n\n        xhr.onreadystatechange = function() {\n          // DONE (success or failure)\n          if (xhr.readyState === 4) {\n            request.signal.removeEventListener('abort', abortXhr);\n          }\n        };\n      }\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n    })\n  }\n\n  fetch.polyfill = true;\n\n  if (!self.fetch) {\n    self.fetch = fetch;\n    self.Headers = Headers;\n    self.Request = Request;\n    self.Response = Response;\n  }\n\n  exports.Headers = Headers;\n  exports.Request = Request;\n  exports.Response = Response;\n  exports.fetch = fetch;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n    var proto = Element.prototype;\n\n    proto.matches = proto.matchesSelector ||\n                    proto.mozMatchesSelector ||\n                    proto.msMatchesSelector ||\n                    proto.oMatchesSelector ||\n                    proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n    while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n        if (typeof element.matches === 'function' &&\n            element.matches(selector)) {\n          return element;\n        }\n        element = element.parentNode;\n    }\n}\n\nmodule.exports = closest;\n","var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n    var listenerFn = listener.apply(this, arguments);\n\n    element.addEventListener(type, listenerFn, useCapture);\n\n    return {\n        destroy: function() {\n            element.removeEventListener(type, listenerFn, useCapture);\n        }\n    }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n    // Handle the regular Element usage\n    if (typeof elements.addEventListener === 'function') {\n        return _delegate.apply(null, arguments);\n    }\n\n    // Handle Element-less usage, it defaults to global delegation\n    if (typeof type === 'function') {\n        // Use `document` as the first parameter, then apply arguments\n        // This is a short way to .unshift `arguments` without running into deoptimizations\n        return _delegate.bind(null, document).apply(null, arguments);\n    }\n\n    // Handle Selector-based usage\n    if (typeof elements === 'string') {\n        elements = document.querySelectorAll(elements);\n    }\n\n    // Handle Array-like based usage\n    return Array.prototype.map.call(elements, function (element) {\n        return _delegate(element, selector, type, callback, useCapture);\n    });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n    return function(e) {\n        e.delegateTarget = closest(e.target, selector);\n\n        if (e.delegateTarget) {\n            callback.call(element, e);\n        }\n    }\n}\n\nmodule.exports = delegate;\n","/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n    return value !== undefined\n        && value instanceof HTMLElement\n        && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return value !== undefined\n        && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n        && ('length' in value)\n        && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n    return typeof value === 'string'\n        || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return type === '[object Function]';\n};\n","var is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n    if (!target && !type && !callback) {\n        throw new Error('Missing required arguments');\n    }\n\n    if (!is.string(type)) {\n        throw new TypeError('Second argument must be a String');\n    }\n\n    if (!is.fn(callback)) {\n        throw new TypeError('Third argument must be a Function');\n    }\n\n    if (is.node(target)) {\n        return listenNode(target, type, callback);\n    }\n    else if (is.nodeList(target)) {\n        return listenNodeList(target, type, callback);\n    }\n    else if (is.string(target)) {\n        return listenSelector(target, type, callback);\n    }\n    else {\n        throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n    }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n    node.addEventListener(type, callback);\n\n    return {\n        destroy: function() {\n            node.removeEventListener(type, callback);\n        }\n    }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n    Array.prototype.forEach.call(nodeList, function(node) {\n        node.addEventListener(type, callback);\n    });\n\n    return {\n        destroy: function() {\n            Array.prototype.forEach.call(nodeList, function(node) {\n                node.removeEventListener(type, callback);\n            });\n        }\n    }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n    return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n","/*!\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 ( typeof module === \"object\" && 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 ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\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","'use strict';\nmodule.exports = milliseconds => {\n\tif (typeof milliseconds !== 'number') {\n\t\tthrow new TypeError('Expected a number');\n\t}\n\n\tconst roundTowardsZero = milliseconds > 0 ? Math.floor : Math.ceil;\n\n\treturn {\n\t\tdays: roundTowardsZero(milliseconds / 86400000),\n\t\thours: roundTowardsZero(milliseconds / 3600000) % 24,\n\t\tminutes: roundTowardsZero(milliseconds / 60000) % 60,\n\t\tseconds: roundTowardsZero(milliseconds / 1000) % 60,\n\t\tmilliseconds: roundTowardsZero(milliseconds) % 1000,\n\t\tmicroseconds: roundTowardsZero(milliseconds * 1000) % 1000,\n\t\tnanoseconds: roundTowardsZero(milliseconds * 1e6) % 1000\n\t};\n};\n","// vim:ts=4:sts=4:sw=4:\n/*!\n *\n * Copyright 2009-2012 Kris Kowal under the terms of the MIT\n * license found at http://github.com/kriskowal/q/raw/master/LICENSE\n *\n * With parts by Tyler Close\n * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found\n * at http://www.opensource.org/licenses/mit-license.html\n * Forked at ref_send.js version: 2009-05-11\n *\n * With parts by Mark Miller\n * Copyright (C) 2011 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n(function (definition) {\n    \"use strict\";\n\n    // This file will function properly as a <script> tag, or a module\n    // using CommonJS and NodeJS or RequireJS module formats.  In\n    // Common/Node/RequireJS, the module exports the Q API and when\n    // executed as a simple <script>, it creates a Q global instead.\n\n    // Montage Require\n    if (typeof bootstrap === \"function\") {\n        bootstrap(\"promise\", definition);\n\n    // CommonJS\n    } else if (typeof exports === \"object\" && typeof module === \"object\") {\n        module.exports = definition();\n\n    // RequireJS\n    } else if (typeof define === \"function\" && define.amd) {\n        define(definition);\n\n    // SES (Secure EcmaScript)\n    } else if (typeof ses !== \"undefined\") {\n        if (!ses.ok()) {\n            return;\n        } else {\n            ses.makeQ = definition;\n        }\n\n    // <script>\n    } else if (typeof window !== \"undefined\" || typeof self !== \"undefined\") {\n        // Prefer window over self for add-on scripts. Use self for\n        // non-windowed contexts.\n        var global = typeof window !== \"undefined\" ? window : self;\n\n        // Get the `window` object, save the previous Q global\n        // and initialize Q as a global.\n        var previousQ = global.Q;\n        global.Q = definition();\n\n        // Add a noConflict function so Q can be removed from the\n        // global namespace.\n        global.Q.noConflict = function () {\n            global.Q = previousQ;\n            return this;\n        };\n\n    } else {\n        throw new Error(\"This environment was not anticipated by Q. Please file a bug.\");\n    }\n\n})(function () {\n\"use strict\";\n\nvar hasStacks = false;\ntry {\n    throw new Error();\n} catch (e) {\n    hasStacks = !!e.stack;\n}\n\n// All code after this point will be filtered from stack traces reported\n// by Q.\nvar qStartingLine = captureLine();\nvar qFileName;\n\n// shims\n\n// used for fallback in \"allResolved\"\nvar noop = function () {};\n\n// Use the fastest possible means to execute a task in a future turn\n// of the event loop.\nvar nextTick =(function () {\n    // linked list of tasks (single, with head node)\n    var head = {task: void 0, next: null};\n    var tail = head;\n    var flushing = false;\n    var requestTick = void 0;\n    var isNodeJS = false;\n    // queue for late tasks, used by unhandled rejection tracking\n    var laterQueue = [];\n\n    function flush() {\n        /* jshint loopfunc: true */\n        var task, domain;\n\n        while (head.next) {\n            head = head.next;\n            task = head.task;\n            head.task = void 0;\n            domain = head.domain;\n\n            if (domain) {\n                head.domain = void 0;\n                domain.enter();\n            }\n            runSingle(task, domain);\n\n        }\n        while (laterQueue.length) {\n            task = laterQueue.pop();\n            runSingle(task);\n        }\n        flushing = false;\n    }\n    // runs a single function in the async queue\n    function runSingle(task, domain) {\n        try {\n            task();\n\n        } catch (e) {\n            if (isNodeJS) {\n                // In node, uncaught exceptions are considered fatal errors.\n                // Re-throw them synchronously to interrupt flushing!\n\n                // Ensure continuation if the uncaught exception is suppressed\n                // listening \"uncaughtException\" events (as domains does).\n                // Continue in next event to avoid tick recursion.\n                if (domain) {\n                    domain.exit();\n                }\n                setTimeout(flush, 0);\n                if (domain) {\n                    domain.enter();\n                }\n\n                throw e;\n\n            } else {\n                // In browsers, uncaught exceptions are not fatal.\n                // Re-throw them asynchronously to avoid slow-downs.\n                setTimeout(function () {\n                    throw e;\n                }, 0);\n            }\n        }\n\n        if (domain) {\n            domain.exit();\n        }\n    }\n\n    nextTick = function (task) {\n        tail = tail.next = {\n            task: task,\n            domain: isNodeJS && process.domain,\n            next: null\n        };\n\n        if (!flushing) {\n            flushing = true;\n            requestTick();\n        }\n    };\n\n    if (typeof process === \"object\" &&\n        process.toString() === \"[object process]\" && process.nextTick) {\n        // Ensure Q is in a real Node environment, with a `process.nextTick`.\n        // To see through fake Node environments:\n        // * Mocha test runner - exposes a `process` global without a `nextTick`\n        // * Browserify - exposes a `process.nexTick` function that uses\n        //   `setTimeout`. In this case `setImmediate` is preferred because\n        //    it is faster. Browserify's `process.toString()` yields\n        //   \"[object Object]\", while in a real Node environment\n        //   `process.nextTick()` yields \"[object process]\".\n        isNodeJS = true;\n\n        requestTick = function () {\n            process.nextTick(flush);\n        };\n\n    } else if (typeof setImmediate === \"function\") {\n        // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate\n        if (typeof window !== \"undefined\") {\n            requestTick = setImmediate.bind(window, flush);\n        } else {\n            requestTick = function () {\n                setImmediate(flush);\n            };\n        }\n\n    } else if (typeof MessageChannel !== \"undefined\") {\n        // modern browsers\n        // http://www.nonblocking.io/2011/06/windownexttick.html\n        var channel = new MessageChannel();\n        // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create\n        // working message ports the first time a page loads.\n        channel.port1.onmessage = function () {\n            requestTick = requestPortTick;\n            channel.port1.onmessage = flush;\n            flush();\n        };\n        var requestPortTick = function () {\n            // Opera requires us to provide a message payload, regardless of\n            // whether we use it.\n            channel.port2.postMessage(0);\n        };\n        requestTick = function () {\n            setTimeout(flush, 0);\n            requestPortTick();\n        };\n\n    } else {\n        // old browsers\n        requestTick = function () {\n            setTimeout(flush, 0);\n        };\n    }\n    // runs a task after all other tasks have been run\n    // this is useful for unhandled rejection tracking that needs to happen\n    // after all `then`d tasks have been run.\n    nextTick.runAfter = function (task) {\n        laterQueue.push(task);\n        if (!flushing) {\n            flushing = true;\n            requestTick();\n        }\n    };\n    return nextTick;\n})();\n\n// Attempt to make generics safe in the face of downstream\n// modifications.\n// There is no situation where this is necessary.\n// If you need a security guarantee, these primordials need to be\n// deeply frozen anyway, and if you don’t need a security guarantee,\n// this is just plain paranoid.\n// However, this **might** have the nice side-effect of reducing the size of\n// the minified code by reducing x.call() to merely x()\n// See Mark Miller’s explanation of what this does.\n// http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming\nvar call = Function.call;\nfunction uncurryThis(f) {\n    return function () {\n        return call.apply(f, arguments);\n    };\n}\n// This is equivalent, but slower:\n// uncurryThis = Function_bind.bind(Function_bind.call);\n// http://jsperf.com/uncurrythis\n\nvar array_slice = uncurryThis(Array.prototype.slice);\n\nvar array_reduce = uncurryThis(\n    Array.prototype.reduce || function (callback, basis) {\n        var index = 0,\n            length = this.length;\n        // concerning the initial value, if one is not provided\n        if (arguments.length === 1) {\n            // seek to the first value in the array, accounting\n            // for the possibility that is is a sparse array\n            do {\n                if (index in this) {\n                    basis = this[index++];\n                    break;\n                }\n                if (++index >= length) {\n                    throw new TypeError();\n                }\n            } while (1);\n        }\n        // reduce\n        for (; index < length; index++) {\n            // account for the possibility that the array is sparse\n            if (index in this) {\n                basis = callback(basis, this[index], index);\n            }\n        }\n        return basis;\n    }\n);\n\nvar array_indexOf = uncurryThis(\n    Array.prototype.indexOf || function (value) {\n        // not a very good shim, but good enough for our one use of it\n        for (var i = 0; i < this.length; i++) {\n            if (this[i] === value) {\n                return i;\n            }\n        }\n        return -1;\n    }\n);\n\nvar array_map = uncurryThis(\n    Array.prototype.map || function (callback, thisp) {\n        var self = this;\n        var collect = [];\n        array_reduce(self, function (undefined, value, index) {\n            collect.push(callback.call(thisp, value, index, self));\n        }, void 0);\n        return collect;\n    }\n);\n\nvar object_create = Object.create || function (prototype) {\n    function Type() { }\n    Type.prototype = prototype;\n    return new Type();\n};\n\nvar object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\n\nvar object_keys = Object.keys || function (object) {\n    var keys = [];\n    for (var key in object) {\n        if (object_hasOwnProperty(object, key)) {\n            keys.push(key);\n        }\n    }\n    return keys;\n};\n\nvar object_toString = uncurryThis(Object.prototype.toString);\n\nfunction isObject(value) {\n    return value === Object(value);\n}\n\n// generator related shims\n\n// FIXME: Remove this function once ES6 generators are in SpiderMonkey.\nfunction isStopIteration(exception) {\n    return (\n        object_toString(exception) === \"[object StopIteration]\" ||\n        exception instanceof QReturnValue\n    );\n}\n\n// FIXME: Remove this helper and Q.return once ES6 generators are in\n// SpiderMonkey.\nvar QReturnValue;\nif (typeof ReturnValue !== \"undefined\") {\n    QReturnValue = ReturnValue;\n} else {\n    QReturnValue = function (value) {\n        this.value = value;\n    };\n}\n\n// long stack traces\n\nvar STACK_JUMP_SEPARATOR = \"From previous event:\";\n\nfunction makeStackTraceLong(error, promise) {\n    // If possible, transform the error stack trace by removing Node and Q\n    // cruft, then concatenating with the stack trace of `promise`. See #57.\n    if (hasStacks &&\n        promise.stack &&\n        typeof error === \"object\" &&\n        error !== null &&\n        error.stack &&\n        error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1\n    ) {\n        var stacks = [];\n        for (var p = promise; !!p; p = p.source) {\n            if (p.stack) {\n                stacks.unshift(p.stack);\n            }\n        }\n        stacks.unshift(error.stack);\n\n        var concatedStacks = stacks.join(\"\\n\" + STACK_JUMP_SEPARATOR + \"\\n\");\n        error.stack = filterStackString(concatedStacks);\n    }\n}\n\nfunction filterStackString(stackString) {\n    var lines = stackString.split(\"\\n\");\n    var desiredLines = [];\n    for (var i = 0; i < lines.length; ++i) {\n        var line = lines[i];\n\n        if (!isInternalFrame(line) && !isNodeFrame(line) && line) {\n            desiredLines.push(line);\n        }\n    }\n    return desiredLines.join(\"\\n\");\n}\n\nfunction isNodeFrame(stackLine) {\n    return stackLine.indexOf(\"(module.js:\") !== -1 ||\n           stackLine.indexOf(\"(node.js:\") !== -1;\n}\n\nfunction getFileNameAndLineNumber(stackLine) {\n    // Named functions: \"at functionName (filename:lineNumber:columnNumber)\"\n    // In IE10 function name can have spaces (\"Anonymous function\") O_o\n    var attempt1 = /at .+ \\((.+):(\\d+):(?:\\d+)\\)$/.exec(stackLine);\n    if (attempt1) {\n        return [attempt1[1], Number(attempt1[2])];\n    }\n\n    // Anonymous functions: \"at filename:lineNumber:columnNumber\"\n    var attempt2 = /at ([^ ]+):(\\d+):(?:\\d+)$/.exec(stackLine);\n    if (attempt2) {\n        return [attempt2[1], Number(attempt2[2])];\n    }\n\n    // Firefox style: \"function@filename:lineNumber or @filename:lineNumber\"\n    var attempt3 = /.*@(.+):(\\d+)$/.exec(stackLine);\n    if (attempt3) {\n        return [attempt3[1], Number(attempt3[2])];\n    }\n}\n\nfunction isInternalFrame(stackLine) {\n    var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);\n\n    if (!fileNameAndLineNumber) {\n        return false;\n    }\n\n    var fileName = fileNameAndLineNumber[0];\n    var lineNumber = fileNameAndLineNumber[1];\n\n    return fileName === qFileName &&\n        lineNumber >= qStartingLine &&\n        lineNumber <= qEndingLine;\n}\n\n// discover own file name and line number range for filtering stack\n// traces\nfunction captureLine() {\n    if (!hasStacks) {\n        return;\n    }\n\n    try {\n        throw new Error();\n    } catch (e) {\n        var lines = e.stack.split(\"\\n\");\n        var firstLine = lines[0].indexOf(\"@\") > 0 ? lines[1] : lines[2];\n        var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);\n        if (!fileNameAndLineNumber) {\n            return;\n        }\n\n        qFileName = fileNameAndLineNumber[0];\n        return fileNameAndLineNumber[1];\n    }\n}\n\nfunction deprecate(callback, name, alternative) {\n    return function () {\n        if (typeof console !== \"undefined\" &&\n            typeof console.warn === \"function\") {\n            console.warn(name + \" is deprecated, use \" + alternative +\n                         \" instead.\", new Error(\"\").stack);\n        }\n        return callback.apply(callback, arguments);\n    };\n}\n\n// end of shims\n// beginning of real work\n\n/**\n * Constructs a promise for an immediate reference, passes promises through, or\n * coerces promises from different systems.\n * @param value immediate reference or promise\n */\nfunction Q(value) {\n    // If the object is already a Promise, return it directly.  This enables\n    // the resolve function to both be used to created references from objects,\n    // but to tolerably coerce non-promises to promises.\n    if (value instanceof Promise) {\n        return value;\n    }\n\n    // assimilate thenables\n    if (isPromiseAlike(value)) {\n        return coerce(value);\n    } else {\n        return fulfill(value);\n    }\n}\nQ.resolve = Q;\n\n/**\n * Performs a task in a future turn of the event loop.\n * @param {Function} task\n */\nQ.nextTick = nextTick;\n\n/**\n * Controls whether or not long stack traces will be on\n */\nQ.longStackSupport = false;\n\n// enable long stacks if Q_DEBUG is set\nif (typeof process === \"object\" && process && process.env && process.env.Q_DEBUG) {\n    Q.longStackSupport = true;\n}\n\n/**\n * Constructs a {promise, resolve, reject} object.\n *\n * `resolve` is a callback to invoke with a more resolved value for the\n * promise. To fulfill the promise, invoke `resolve` with any value that is\n * not a thenable. To reject the promise, invoke `resolve` with a rejected\n * thenable, or invoke `reject` with the reason directly. To resolve the\n * promise to another thenable, thus putting it in the same state, invoke\n * `resolve` with that other thenable.\n */\nQ.defer = defer;\nfunction defer() {\n    // if \"messages\" is an \"Array\", that indicates that the promise has not yet\n    // been resolved.  If it is \"undefined\", it has been resolved.  Each\n    // element of the messages array is itself an array of complete arguments to\n    // forward to the resolved promise.  We coerce the resolution value to a\n    // promise using the `resolve` function because it handles both fully\n    // non-thenable values and other thenables gracefully.\n    var messages = [], progressListeners = [], resolvedPromise;\n\n    var deferred = object_create(defer.prototype);\n    var promise = object_create(Promise.prototype);\n\n    promise.promiseDispatch = function (resolve, op, operands) {\n        var args = array_slice(arguments);\n        if (messages) {\n            messages.push(args);\n            if (op === \"when\" && operands[1]) { // progress operand\n                progressListeners.push(operands[1]);\n            }\n        } else {\n            Q.nextTick(function () {\n                resolvedPromise.promiseDispatch.apply(resolvedPromise, args);\n            });\n        }\n    };\n\n    // XXX deprecated\n    promise.valueOf = function () {\n        if (messages) {\n            return promise;\n        }\n        var nearerValue = nearer(resolvedPromise);\n        if (isPromise(nearerValue)) {\n            resolvedPromise = nearerValue; // shorten chain\n        }\n        return nearerValue;\n    };\n\n    promise.inspect = function () {\n        if (!resolvedPromise) {\n            return { state: \"pending\" };\n        }\n        return resolvedPromise.inspect();\n    };\n\n    if (Q.longStackSupport && hasStacks) {\n        try {\n            throw new Error();\n        } catch (e) {\n            // NOTE: don't try to use `Error.captureStackTrace` or transfer the\n            // accessor around; that causes memory leaks as per GH-111. Just\n            // reify the stack trace as a string ASAP.\n            //\n            // At the same time, cut off the first line; it's always just\n            // \"[object Promise]\\n\", as per the `toString`.\n            promise.stack = e.stack.substring(e.stack.indexOf(\"\\n\") + 1);\n        }\n    }\n\n    // NOTE: we do the checks for `resolvedPromise` in each method, instead of\n    // consolidating them into `become`, since otherwise we'd create new\n    // promises with the lines `become(whatever(value))`. See e.g. GH-252.\n\n    function become(newPromise) {\n        resolvedPromise = newPromise;\n        promise.source = newPromise;\n\n        array_reduce(messages, function (undefined, message) {\n            Q.nextTick(function () {\n                newPromise.promiseDispatch.apply(newPromise, message);\n            });\n        }, void 0);\n\n        messages = void 0;\n        progressListeners = void 0;\n    }\n\n    deferred.promise = promise;\n    deferred.resolve = function (value) {\n        if (resolvedPromise) {\n            return;\n        }\n\n        become(Q(value));\n    };\n\n    deferred.fulfill = function (value) {\n        if (resolvedPromise) {\n            return;\n        }\n\n        become(fulfill(value));\n    };\n    deferred.reject = function (reason) {\n        if (resolvedPromise) {\n            return;\n        }\n\n        become(reject(reason));\n    };\n    deferred.notify = function (progress) {\n        if (resolvedPromise) {\n            return;\n        }\n\n        array_reduce(progressListeners, function (undefined, progressListener) {\n            Q.nextTick(function () {\n                progressListener(progress);\n            });\n        }, void 0);\n    };\n\n    return deferred;\n}\n\n/**\n * Creates a Node-style callback that will resolve or reject the deferred\n * promise.\n * @returns a nodeback\n */\ndefer.prototype.makeNodeResolver = function () {\n    var self = this;\n    return function (error, value) {\n        if (error) {\n            self.reject(error);\n        } else if (arguments.length > 2) {\n            self.resolve(array_slice(arguments, 1));\n        } else {\n            self.resolve(value);\n        }\n    };\n};\n\n/**\n * @param resolver {Function} a function that returns nothing and accepts\n * the resolve, reject, and notify functions for a deferred.\n * @returns a promise that may be resolved with the given resolve and reject\n * functions, or rejected by a thrown exception in resolver\n */\nQ.Promise = promise; // ES6\nQ.promise = promise;\nfunction promise(resolver) {\n    if (typeof resolver !== \"function\") {\n        throw new TypeError(\"resolver must be a function.\");\n    }\n    var deferred = defer();\n    try {\n        resolver(deferred.resolve, deferred.reject, deferred.notify);\n    } catch (reason) {\n        deferred.reject(reason);\n    }\n    return deferred.promise;\n}\n\npromise.race = race; // ES6\npromise.all = all; // ES6\npromise.reject = reject; // ES6\npromise.resolve = Q; // ES6\n\n// XXX experimental.  This method is a way to denote that a local value is\n// serializable and should be immediately dispatched to a remote upon request,\n// instead of passing a reference.\nQ.passByCopy = function (object) {\n    //freeze(object);\n    //passByCopies.set(object, true);\n    return object;\n};\n\nPromise.prototype.passByCopy = function () {\n    //freeze(object);\n    //passByCopies.set(object, true);\n    return this;\n};\n\n/**\n * If two promises eventually fulfill to the same value, promises that value,\n * but otherwise rejects.\n * @param x {Any*}\n * @param y {Any*}\n * @returns {Any*} a promise for x and y if they are the same, but a rejection\n * otherwise.\n *\n */\nQ.join = function (x, y) {\n    return Q(x).join(y);\n};\n\nPromise.prototype.join = function (that) {\n    return Q([this, that]).spread(function (x, y) {\n        if (x === y) {\n            // TODO: \"===\" should be Object.is or equiv\n            return x;\n        } else {\n            throw new Error(\"Can't join: not the same: \" + x + \" \" + y);\n        }\n    });\n};\n\n/**\n * Returns a promise for the first of an array of promises to become settled.\n * @param answers {Array[Any*]} promises to race\n * @returns {Any*} the first promise to be settled\n */\nQ.race = race;\nfunction race(answerPs) {\n    return promise(function (resolve, reject) {\n        // Switch to this once we can assume at least ES5\n        // answerPs.forEach(function (answerP) {\n        //     Q(answerP).then(resolve, reject);\n        // });\n        // Use this in the meantime\n        for (var i = 0, len = answerPs.length; i < len; i++) {\n            Q(answerPs[i]).then(resolve, reject);\n        }\n    });\n}\n\nPromise.prototype.race = function () {\n    return this.then(Q.race);\n};\n\n/**\n * Constructs a Promise with a promise descriptor object and optional fallback\n * function.  The descriptor contains methods like when(rejected), get(name),\n * set(name, value), post(name, args), and delete(name), which all\n * return either a value, a promise for a value, or a rejection.  The fallback\n * accepts the operation name, a resolver, and any further arguments that would\n * have been forwarded to the appropriate method above had a method been\n * provided with the proper name.  The API makes no guarantees about the nature\n * of the returned object, apart from that it is usable whereever promises are\n * bought and sold.\n */\nQ.makePromise = Promise;\nfunction Promise(descriptor, fallback, inspect) {\n    if (fallback === void 0) {\n        fallback = function (op) {\n            return reject(new Error(\n                \"Promise does not support operation: \" + op\n            ));\n        };\n    }\n    if (inspect === void 0) {\n        inspect = function () {\n            return {state: \"unknown\"};\n        };\n    }\n\n    var promise = object_create(Promise.prototype);\n\n    promise.promiseDispatch = function (resolve, op, args) {\n        var result;\n        try {\n            if (descriptor[op]) {\n                result = descriptor[op].apply(promise, args);\n            } else {\n                result = fallback.call(promise, op, args);\n            }\n        } catch (exception) {\n            result = reject(exception);\n        }\n        if (resolve) {\n            resolve(result);\n        }\n    };\n\n    promise.inspect = inspect;\n\n    // XXX deprecated `valueOf` and `exception` support\n    if (inspect) {\n        var inspected = inspect();\n        if (inspected.state === \"rejected\") {\n            promise.exception = inspected.reason;\n        }\n\n        promise.valueOf = function () {\n            var inspected = inspect();\n            if (inspected.state === \"pending\" ||\n                inspected.state === \"rejected\") {\n                return promise;\n            }\n            return inspected.value;\n        };\n    }\n\n    return promise;\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.then = function (fulfilled, rejected, progressed) {\n    var self = this;\n    var deferred = defer();\n    var done = false;   // ensure the untrusted promise makes at most a\n                        // single call to one of the callbacks\n\n    function _fulfilled(value) {\n        try {\n            return typeof fulfilled === \"function\" ? fulfilled(value) : value;\n        } catch (exception) {\n            return reject(exception);\n        }\n    }\n\n    function _rejected(exception) {\n        if (typeof rejected === \"function\") {\n            makeStackTraceLong(exception, self);\n            try {\n                return rejected(exception);\n            } catch (newException) {\n                return reject(newException);\n            }\n        }\n        return reject(exception);\n    }\n\n    function _progressed(value) {\n        return typeof progressed === \"function\" ? progressed(value) : value;\n    }\n\n    Q.nextTick(function () {\n        self.promiseDispatch(function (value) {\n            if (done) {\n                return;\n            }\n            done = true;\n\n            deferred.resolve(_fulfilled(value));\n        }, \"when\", [function (exception) {\n            if (done) {\n                return;\n            }\n            done = true;\n\n            deferred.resolve(_rejected(exception));\n        }]);\n    });\n\n    // Progress propagator need to be attached in the current tick.\n    self.promiseDispatch(void 0, \"when\", [void 0, function (value) {\n        var newValue;\n        var threw = false;\n        try {\n            newValue = _progressed(value);\n        } catch (e) {\n            threw = true;\n            if (Q.onerror) {\n                Q.onerror(e);\n            } else {\n                throw e;\n            }\n        }\n\n        if (!threw) {\n            deferred.notify(newValue);\n        }\n    }]);\n\n    return deferred.promise;\n};\n\nQ.tap = function (promise, callback) {\n    return Q(promise).tap(callback);\n};\n\n/**\n * Works almost like \"finally\", but not called for rejections.\n * Original resolution value is passed through callback unaffected.\n * Callback may return a promise that will be awaited for.\n * @param {Function} callback\n * @returns {Q.Promise}\n * @example\n * doSomething()\n *   .then(...)\n *   .tap(console.log)\n *   .then(...);\n */\nPromise.prototype.tap = function (callback) {\n    callback = Q(callback);\n\n    return this.then(function (value) {\n        return callback.fcall(value).thenResolve(value);\n    });\n};\n\n/**\n * Registers an observer on a promise.\n *\n * Guarantees:\n *\n * 1. that fulfilled and rejected will be called only once.\n * 2. that either the fulfilled callback or the rejected callback will be\n *    called, but not both.\n * 3. that fulfilled and rejected will not be called in this turn.\n *\n * @param value      promise or immediate reference to observe\n * @param fulfilled  function to be called with the fulfilled value\n * @param rejected   function to be called with the rejection exception\n * @param progressed function to be called on any progress notifications\n * @return promise for the return value from the invoked callback\n */\nQ.when = when;\nfunction when(value, fulfilled, rejected, progressed) {\n    return Q(value).then(fulfilled, rejected, progressed);\n}\n\nPromise.prototype.thenResolve = function (value) {\n    return this.then(function () { return value; });\n};\n\nQ.thenResolve = function (promise, value) {\n    return Q(promise).thenResolve(value);\n};\n\nPromise.prototype.thenReject = function (reason) {\n    return this.then(function () { throw reason; });\n};\n\nQ.thenReject = function (promise, reason) {\n    return Q(promise).thenReject(reason);\n};\n\n/**\n * If an object is not a promise, it is as \"near\" as possible.\n * If a promise is rejected, it is as \"near\" as possible too.\n * If it’s a fulfilled promise, the fulfillment value is nearer.\n * If it’s a deferred promise and the deferred has been resolved, the\n * resolution is \"nearer\".\n * @param object\n * @returns most resolved (nearest) form of the object\n */\n\n// XXX should we re-do this?\nQ.nearer = nearer;\nfunction nearer(value) {\n    if (isPromise(value)) {\n        var inspected = value.inspect();\n        if (inspected.state === \"fulfilled\") {\n            return inspected.value;\n        }\n    }\n    return value;\n}\n\n/**\n * @returns whether the given object is a promise.\n * Otherwise it is a fulfilled value.\n */\nQ.isPromise = isPromise;\nfunction isPromise(object) {\n    return object instanceof Promise;\n}\n\nQ.isPromiseAlike = isPromiseAlike;\nfunction isPromiseAlike(object) {\n    return isObject(object) && typeof object.then === \"function\";\n}\n\n/**\n * @returns whether the given object is a pending promise, meaning not\n * fulfilled or rejected.\n */\nQ.isPending = isPending;\nfunction isPending(object) {\n    return isPromise(object) && object.inspect().state === \"pending\";\n}\n\nPromise.prototype.isPending = function () {\n    return this.inspect().state === \"pending\";\n};\n\n/**\n * @returns whether the given object is a value or fulfilled\n * promise.\n */\nQ.isFulfilled = isFulfilled;\nfunction isFulfilled(object) {\n    return !isPromise(object) || object.inspect().state === \"fulfilled\";\n}\n\nPromise.prototype.isFulfilled = function () {\n    return this.inspect().state === \"fulfilled\";\n};\n\n/**\n * @returns whether the given object is a rejected promise.\n */\nQ.isRejected = isRejected;\nfunction isRejected(object) {\n    return isPromise(object) && object.inspect().state === \"rejected\";\n}\n\nPromise.prototype.isRejected = function () {\n    return this.inspect().state === \"rejected\";\n};\n\n//// BEGIN UNHANDLED REJECTION TRACKING\n\n// This promise library consumes exceptions thrown in handlers so they can be\n// handled by a subsequent promise.  The exceptions get added to this array when\n// they are created, and removed when they are handled.  Note that in ES6 or\n// shimmed environments, this would naturally be a `Set`.\nvar unhandledReasons = [];\nvar unhandledRejections = [];\nvar reportedUnhandledRejections = [];\nvar trackUnhandledRejections = true;\n\nfunction resetUnhandledRejections() {\n    unhandledReasons.length = 0;\n    unhandledRejections.length = 0;\n\n    if (!trackUnhandledRejections) {\n        trackUnhandledRejections = true;\n    }\n}\n\nfunction trackRejection(promise, reason) {\n    if (!trackUnhandledRejections) {\n        return;\n    }\n    if (typeof process === \"object\" && typeof process.emit === \"function\") {\n        Q.nextTick.runAfter(function () {\n            if (array_indexOf(unhandledRejections, promise) !== -1) {\n                process.emit(\"unhandledRejection\", reason, promise);\n                reportedUnhandledRejections.push(promise);\n            }\n        });\n    }\n\n    unhandledRejections.push(promise);\n    if (reason && typeof reason.stack !== \"undefined\") {\n        unhandledReasons.push(reason.stack);\n    } else {\n        unhandledReasons.push(\"(no stack) \" + reason);\n    }\n}\n\nfunction untrackRejection(promise) {\n    if (!trackUnhandledRejections) {\n        return;\n    }\n\n    var at = array_indexOf(unhandledRejections, promise);\n    if (at !== -1) {\n        if (typeof process === \"object\" && typeof process.emit === \"function\") {\n            Q.nextTick.runAfter(function () {\n                var atReport = array_indexOf(reportedUnhandledRejections, promise);\n                if (atReport !== -1) {\n                    process.emit(\"rejectionHandled\", unhandledReasons[at], promise);\n                    reportedUnhandledRejections.splice(atReport, 1);\n                }\n            });\n        }\n        unhandledRejections.splice(at, 1);\n        unhandledReasons.splice(at, 1);\n    }\n}\n\nQ.resetUnhandledRejections = resetUnhandledRejections;\n\nQ.getUnhandledReasons = function () {\n    // Make a copy so that consumers can't interfere with our internal state.\n    return unhandledReasons.slice();\n};\n\nQ.stopUnhandledRejectionTracking = function () {\n    resetUnhandledRejections();\n    trackUnhandledRejections = false;\n};\n\nresetUnhandledRejections();\n\n//// END UNHANDLED REJECTION TRACKING\n\n/**\n * Constructs a rejected promise.\n * @param reason value describing the failure\n */\nQ.reject = reject;\nfunction reject(reason) {\n    var rejection = Promise({\n        \"when\": function (rejected) {\n            // note that the error has been handled\n            if (rejected) {\n                untrackRejection(this);\n            }\n            return rejected ? rejected(reason) : this;\n        }\n    }, function fallback() {\n        return this;\n    }, function inspect() {\n        return { state: \"rejected\", reason: reason };\n    });\n\n    // Note that the reason has not been handled.\n    trackRejection(rejection, reason);\n\n    return rejection;\n}\n\n/**\n * Constructs a fulfilled promise for an immediate reference.\n * @param value immediate reference\n */\nQ.fulfill = fulfill;\nfunction fulfill(value) {\n    return Promise({\n        \"when\": function () {\n            return value;\n        },\n        \"get\": function (name) {\n            return value[name];\n        },\n        \"set\": function (name, rhs) {\n            value[name] = rhs;\n        },\n        \"delete\": function (name) {\n            delete value[name];\n        },\n        \"post\": function (name, args) {\n            // Mark Miller proposes that post with no name should apply a\n            // promised function.\n            if (name === null || name === void 0) {\n                return value.apply(void 0, args);\n            } else {\n                return value[name].apply(value, args);\n            }\n        },\n        \"apply\": function (thisp, args) {\n            return value.apply(thisp, args);\n        },\n        \"keys\": function () {\n            return object_keys(value);\n        }\n    }, void 0, function inspect() {\n        return { state: \"fulfilled\", value: value };\n    });\n}\n\n/**\n * Converts thenables to Q promises.\n * @param promise thenable promise\n * @returns a Q promise\n */\nfunction coerce(promise) {\n    var deferred = defer();\n    Q.nextTick(function () {\n        try {\n            promise.then(deferred.resolve, deferred.reject, deferred.notify);\n        } catch (exception) {\n            deferred.reject(exception);\n        }\n    });\n    return deferred.promise;\n}\n\n/**\n * Annotates an object such that it will never be\n * transferred away from this process over any promise\n * communication channel.\n * @param object\n * @returns promise a wrapping of that object that\n * additionally responds to the \"isDef\" message\n * without a rejection.\n */\nQ.master = master;\nfunction master(object) {\n    return Promise({\n        \"isDef\": function () {}\n    }, function fallback(op, args) {\n        return dispatch(object, op, args);\n    }, function () {\n        return Q(object).inspect();\n    });\n}\n\n/**\n * Spreads the values of a promised array of arguments into the\n * fulfillment callback.\n * @param fulfilled callback that receives variadic arguments from the\n * promised array\n * @param rejected callback that receives the exception if the promise\n * is rejected.\n * @returns a promise for the return value or thrown exception of\n * either callback.\n */\nQ.spread = spread;\nfunction spread(value, fulfilled, rejected) {\n    return Q(value).spread(fulfilled, rejected);\n}\n\nPromise.prototype.spread = function (fulfilled, rejected) {\n    return this.all().then(function (array) {\n        return fulfilled.apply(void 0, array);\n    }, rejected);\n};\n\n/**\n * The async function is a decorator for generator functions, turning\n * them into asynchronous generators.  Although generators are only part\n * of the newest ECMAScript 6 drafts, this code does not cause syntax\n * errors in older engines.  This code should continue to work and will\n * in fact improve over time as the language improves.\n *\n * ES6 generators are currently part of V8 version 3.19 with the\n * --harmony-generators runtime flag enabled.  SpiderMonkey has had them\n * for longer, but under an older Python-inspired form.  This function\n * works on both kinds of generators.\n *\n * Decorates a generator function such that:\n *  - it may yield promises\n *  - execution will continue when that promise is fulfilled\n *  - the value of the yield expression will be the fulfilled value\n *  - it returns a promise for the return value (when the generator\n *    stops iterating)\n *  - the decorated function returns a promise for the return value\n *    of the generator or the first rejected promise among those\n *    yielded.\n *  - if an error is thrown in the generator, it propagates through\n *    every following yield until it is caught, or until it escapes\n *    the generator function altogether, and is translated into a\n *    rejection for the promise returned by the decorated generator.\n */\nQ.async = async;\nfunction async(makeGenerator) {\n    return function () {\n        // when verb is \"send\", arg is a value\n        // when verb is \"throw\", arg is an exception\n        function continuer(verb, arg) {\n            var result;\n\n            // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only\n            // engine that has a deployed base of browsers that support generators.\n            // However, SM's generators use the Python-inspired semantics of\n            // outdated ES6 drafts.  We would like to support ES6, but we'd also\n            // like to make it possible to use generators in deployed browsers, so\n            // we also support Python-style generators.  At some point we can remove\n            // this block.\n\n            if (typeof StopIteration === \"undefined\") {\n                // ES6 Generators\n                try {\n                    result = generator[verb](arg);\n                } catch (exception) {\n                    return reject(exception);\n                }\n                if (result.done) {\n                    return Q(result.value);\n                } else {\n                    return when(result.value, callback, errback);\n                }\n            } else {\n                // SpiderMonkey Generators\n                // FIXME: Remove this case when SM does ES6 generators.\n                try {\n                    result = generator[verb](arg);\n                } catch (exception) {\n                    if (isStopIteration(exception)) {\n                        return Q(exception.value);\n                    } else {\n                        return reject(exception);\n                    }\n                }\n                return when(result, callback, errback);\n            }\n        }\n        var generator = makeGenerator.apply(this, arguments);\n        var callback = continuer.bind(continuer, \"next\");\n        var errback = continuer.bind(continuer, \"throw\");\n        return callback();\n    };\n}\n\n/**\n * The spawn function is a small wrapper around async that immediately\n * calls the generator and also ends the promise chain, so that any\n * unhandled errors are thrown instead of forwarded to the error\n * handler. This is useful because it's extremely common to run\n * generators at the top-level to work with libraries.\n */\nQ.spawn = spawn;\nfunction spawn(makeGenerator) {\n    Q.done(Q.async(makeGenerator)());\n}\n\n// FIXME: Remove this interface once ES6 generators are in SpiderMonkey.\n/**\n * Throws a ReturnValue exception to stop an asynchronous generator.\n *\n * This interface is a stop-gap measure to support generator return\n * values in older Firefox/SpiderMonkey.  In browsers that support ES6\n * generators like Chromium 29, just use \"return\" in your generator\n * functions.\n *\n * @param value the return value for the surrounding generator\n * @throws ReturnValue exception with the value.\n * @example\n * // ES6 style\n * Q.async(function* () {\n *      var foo = yield getFooPromise();\n *      var bar = yield getBarPromise();\n *      return foo + bar;\n * })\n * // Older SpiderMonkey style\n * Q.async(function () {\n *      var foo = yield getFooPromise();\n *      var bar = yield getBarPromise();\n *      Q.return(foo + bar);\n * })\n */\nQ[\"return\"] = _return;\nfunction _return(value) {\n    throw new QReturnValue(value);\n}\n\n/**\n * The promised function decorator ensures that any promise arguments\n * are settled and passed as values (`this` is also settled and passed\n * as a value).  It will also ensure that the result of a function is\n * always a promise.\n *\n * @example\n * var add = Q.promised(function (a, b) {\n *     return a + b;\n * });\n * add(Q(a), Q(B));\n *\n * @param {function} callback The function to decorate\n * @returns {function} a function that has been decorated.\n */\nQ.promised = promised;\nfunction promised(callback) {\n    return function () {\n        return spread([this, all(arguments)], function (self, args) {\n            return callback.apply(self, args);\n        });\n    };\n}\n\n/**\n * sends a message to a value in a future turn\n * @param object* the recipient\n * @param op the name of the message operation, e.g., \"when\",\n * @param args further arguments to be forwarded to the operation\n * @returns result {Promise} a promise for the result of the operation\n */\nQ.dispatch = dispatch;\nfunction dispatch(object, op, args) {\n    return Q(object).dispatch(op, args);\n}\n\nPromise.prototype.dispatch = function (op, args) {\n    var self = this;\n    var deferred = defer();\n    Q.nextTick(function () {\n        self.promiseDispatch(deferred.resolve, op, args);\n    });\n    return deferred.promise;\n};\n\n/**\n * Gets the value of a property in a future turn.\n * @param object    promise or immediate reference for target object\n * @param name      name of property to get\n * @return promise for the property value\n */\nQ.get = function (object, key) {\n    return Q(object).dispatch(\"get\", [key]);\n};\n\nPromise.prototype.get = function (key) {\n    return this.dispatch(\"get\", [key]);\n};\n\n/**\n * Sets the value of a property in a future turn.\n * @param object    promise or immediate reference for object object\n * @param name      name of property to set\n * @param value     new value of property\n * @return promise for the return value\n */\nQ.set = function (object, key, value) {\n    return Q(object).dispatch(\"set\", [key, value]);\n};\n\nPromise.prototype.set = function (key, value) {\n    return this.dispatch(\"set\", [key, value]);\n};\n\n/**\n * Deletes a property in a future turn.\n * @param object    promise or immediate reference for target object\n * @param name      name of property to delete\n * @return promise for the return value\n */\nQ.del = // XXX legacy\nQ[\"delete\"] = function (object, key) {\n    return Q(object).dispatch(\"delete\", [key]);\n};\n\nPromise.prototype.del = // XXX legacy\nPromise.prototype[\"delete\"] = function (key) {\n    return this.dispatch(\"delete\", [key]);\n};\n\n/**\n * Invokes a method in a future turn.\n * @param object    promise or immediate reference for target object\n * @param name      name of method to invoke\n * @param value     a value to post, typically an array of\n *                  invocation arguments for promises that\n *                  are ultimately backed with `resolve` values,\n *                  as opposed to those backed with URLs\n *                  wherein the posted value can be any\n *                  JSON serializable object.\n * @return promise for the return value\n */\n// bound locally because it is used by other methods\nQ.mapply = // XXX As proposed by \"Redsandro\"\nQ.post = function (object, name, args) {\n    return Q(object).dispatch(\"post\", [name, args]);\n};\n\nPromise.prototype.mapply = // XXX As proposed by \"Redsandro\"\nPromise.prototype.post = function (name, args) {\n    return this.dispatch(\"post\", [name, args]);\n};\n\n/**\n * Invokes a method in a future turn.\n * @param object    promise or immediate reference for target object\n * @param name      name of method to invoke\n * @param ...args   array of invocation arguments\n * @return promise for the return value\n */\nQ.send = // XXX Mark Miller's proposed parlance\nQ.mcall = // XXX As proposed by \"Redsandro\"\nQ.invoke = function (object, name /*...args*/) {\n    return Q(object).dispatch(\"post\", [name, array_slice(arguments, 2)]);\n};\n\nPromise.prototype.send = // XXX Mark Miller's proposed parlance\nPromise.prototype.mcall = // XXX As proposed by \"Redsandro\"\nPromise.prototype.invoke = function (name /*...args*/) {\n    return this.dispatch(\"post\", [name, array_slice(arguments, 1)]);\n};\n\n/**\n * Applies the promised function in a future turn.\n * @param object    promise or immediate reference for target function\n * @param args      array of application arguments\n */\nQ.fapply = function (object, args) {\n    return Q(object).dispatch(\"apply\", [void 0, args]);\n};\n\nPromise.prototype.fapply = function (args) {\n    return this.dispatch(\"apply\", [void 0, args]);\n};\n\n/**\n * Calls the promised function in a future turn.\n * @param object    promise or immediate reference for target function\n * @param ...args   array of application arguments\n */\nQ[\"try\"] =\nQ.fcall = function (object /* ...args*/) {\n    return Q(object).dispatch(\"apply\", [void 0, array_slice(arguments, 1)]);\n};\n\nPromise.prototype.fcall = function (/*...args*/) {\n    return this.dispatch(\"apply\", [void 0, array_slice(arguments)]);\n};\n\n/**\n * Binds the promised function, transforming return values into a fulfilled\n * promise and thrown errors into a rejected one.\n * @param object    promise or immediate reference for target function\n * @param ...args   array of application arguments\n */\nQ.fbind = function (object /*...args*/) {\n    var promise = Q(object);\n    var args = array_slice(arguments, 1);\n    return function fbound() {\n        return promise.dispatch(\"apply\", [\n            this,\n            args.concat(array_slice(arguments))\n        ]);\n    };\n};\nPromise.prototype.fbind = function (/*...args*/) {\n    var promise = this;\n    var args = array_slice(arguments);\n    return function fbound() {\n        return promise.dispatch(\"apply\", [\n            this,\n            args.concat(array_slice(arguments))\n        ]);\n    };\n};\n\n/**\n * Requests the names of the owned properties of a promised\n * object in a future turn.\n * @param object    promise or immediate reference for target object\n * @return promise for the keys of the eventually settled object\n */\nQ.keys = function (object) {\n    return Q(object).dispatch(\"keys\", []);\n};\n\nPromise.prototype.keys = function () {\n    return this.dispatch(\"keys\", []);\n};\n\n/**\n * Turns an array of promises into a promise for an array.  If any of\n * the promises gets rejected, the whole array is rejected immediately.\n * @param {Array*} an array (or promise for an array) of values (or\n * promises for values)\n * @returns a promise for an array of the corresponding values\n */\n// By Mark Miller\n// http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled\nQ.all = all;\nfunction all(promises) {\n    return when(promises, function (promises) {\n        var pendingCount = 0;\n        var deferred = defer();\n        array_reduce(promises, function (undefined, promise, index) {\n            var snapshot;\n            if (\n                isPromise(promise) &&\n                (snapshot = promise.inspect()).state === \"fulfilled\"\n            ) {\n                promises[index] = snapshot.value;\n            } else {\n                ++pendingCount;\n                when(\n                    promise,\n                    function (value) {\n                        promises[index] = value;\n                        if (--pendingCount === 0) {\n                            deferred.resolve(promises);\n                        }\n                    },\n                    deferred.reject,\n                    function (progress) {\n                        deferred.notify({ index: index, value: progress });\n                    }\n                );\n            }\n        }, void 0);\n        if (pendingCount === 0) {\n            deferred.resolve(promises);\n        }\n        return deferred.promise;\n    });\n}\n\nPromise.prototype.all = function () {\n    return all(this);\n};\n\n/**\n * Returns the first resolved promise of an array. Prior rejected promises are\n * ignored.  Rejects only if all promises are rejected.\n * @param {Array*} an array containing values or promises for values\n * @returns a promise fulfilled with the value of the first resolved promise,\n * or a rejected promise if all promises are rejected.\n */\nQ.any = any;\n\nfunction any(promises) {\n    if (promises.length === 0) {\n        return Q.resolve();\n    }\n\n    var deferred = Q.defer();\n    var pendingCount = 0;\n    array_reduce(promises, function (prev, current, index) {\n        var promise = promises[index];\n\n        pendingCount++;\n\n        when(promise, onFulfilled, onRejected, onProgress);\n        function onFulfilled(result) {\n            deferred.resolve(result);\n        }\n        function onRejected() {\n            pendingCount--;\n            if (pendingCount === 0) {\n                deferred.reject(new Error(\n                    \"Can't get fulfillment value from any promise, all \" +\n                    \"promises were rejected.\"\n                ));\n            }\n        }\n        function onProgress(progress) {\n            deferred.notify({\n                index: index,\n                value: progress\n            });\n        }\n    }, undefined);\n\n    return deferred.promise;\n}\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n/**\n * Waits for all promises to be settled, either fulfilled or\n * rejected.  This is distinct from `all` since that would stop\n * waiting at the first rejection.  The promise returned by\n * `allResolved` will never be rejected.\n * @param promises a promise for an array (or an array) of promises\n * (or values)\n * @return a promise for an array of promises\n */\nQ.allResolved = deprecate(allResolved, \"allResolved\", \"allSettled\");\nfunction allResolved(promises) {\n    return when(promises, function (promises) {\n        promises = array_map(promises, Q);\n        return when(all(array_map(promises, function (promise) {\n            return when(promise, noop, noop);\n        })), function () {\n            return promises;\n        });\n    });\n}\n\nPromise.prototype.allResolved = function () {\n    return allResolved(this);\n};\n\n/**\n * @see Promise#allSettled\n */\nQ.allSettled = allSettled;\nfunction allSettled(promises) {\n    return Q(promises).allSettled();\n}\n\n/**\n * Turns an array of promises into a promise for an array of their states (as\n * returned by `inspect`) when they have all settled.\n * @param {Array[Any*]} values an array (or promise for an array) of values (or\n * promises for values)\n * @returns {Array[State]} an array of states for the respective values.\n */\nPromise.prototype.allSettled = function () {\n    return this.then(function (promises) {\n        return all(array_map(promises, function (promise) {\n            promise = Q(promise);\n            function regardless() {\n                return promise.inspect();\n            }\n            return promise.then(regardless, regardless);\n        }));\n    });\n};\n\n/**\n * Captures the failure of a promise, giving an oportunity to recover\n * with a callback.  If the given promise is fulfilled, the returned\n * promise is fulfilled.\n * @param {Any*} promise for something\n * @param {Function} callback to fulfill the returned promise if the\n * given promise is rejected\n * @returns a promise for the return value of the callback\n */\nQ.fail = // XXX legacy\nQ[\"catch\"] = function (object, rejected) {\n    return Q(object).then(void 0, rejected);\n};\n\nPromise.prototype.fail = // XXX legacy\nPromise.prototype[\"catch\"] = function (rejected) {\n    return this.then(void 0, rejected);\n};\n\n/**\n * Attaches a listener that can respond to progress notifications from a\n * promise's originating deferred. This listener receives the exact arguments\n * passed to ``deferred.notify``.\n * @param {Any*} promise for something\n * @param {Function} callback to receive any progress notifications\n * @returns the given promise, unchanged\n */\nQ.progress = progress;\nfunction progress(object, progressed) {\n    return Q(object).then(void 0, void 0, progressed);\n}\n\nPromise.prototype.progress = function (progressed) {\n    return this.then(void 0, void 0, progressed);\n};\n\n/**\n * Provides an opportunity to observe the settling of a promise,\n * regardless of whether the promise is fulfilled or rejected.  Forwards\n * the resolution to the returned promise when the callback is done.\n * The callback can return a promise to defer completion.\n * @param {Any*} promise\n * @param {Function} callback to observe the resolution of the given\n * promise, takes no arguments.\n * @returns a promise for the resolution of the given promise when\n * ``fin`` is done.\n */\nQ.fin = // XXX legacy\nQ[\"finally\"] = function (object, callback) {\n    return Q(object)[\"finally\"](callback);\n};\n\nPromise.prototype.fin = // XXX legacy\nPromise.prototype[\"finally\"] = function (callback) {\n    callback = Q(callback);\n    return this.then(function (value) {\n        return callback.fcall().then(function () {\n            return value;\n        });\n    }, function (reason) {\n        // TODO attempt to recycle the rejection with \"this\".\n        return callback.fcall().then(function () {\n            throw reason;\n        });\n    });\n};\n\n/**\n * Terminates a chain of promises, forcing rejections to be\n * thrown as exceptions.\n * @param {Any*} promise at the end of a chain of promises\n * @returns nothing\n */\nQ.done = function (object, fulfilled, rejected, progress) {\n    return Q(object).done(fulfilled, rejected, progress);\n};\n\nPromise.prototype.done = function (fulfilled, rejected, progress) {\n    var onUnhandledError = function (error) {\n        // forward to a future turn so that ``when``\n        // does not catch it and turn it into a rejection.\n        Q.nextTick(function () {\n            makeStackTraceLong(error, promise);\n            if (Q.onerror) {\n                Q.onerror(error);\n            } else {\n                throw error;\n            }\n        });\n    };\n\n    // Avoid unnecessary `nextTick`ing via an unnecessary `when`.\n    var promise = fulfilled || rejected || progress ?\n        this.then(fulfilled, rejected, progress) :\n        this;\n\n    if (typeof process === \"object\" && process && process.domain) {\n        onUnhandledError = process.domain.bind(onUnhandledError);\n    }\n\n    promise.then(void 0, onUnhandledError);\n};\n\n/**\n * Causes a promise to be rejected if it does not get fulfilled before\n * some milliseconds time out.\n * @param {Any*} promise\n * @param {Number} milliseconds timeout\n * @param {Any*} custom error message or Error object (optional)\n * @returns a promise for the resolution of the given promise if it is\n * fulfilled before the timeout, otherwise rejected.\n */\nQ.timeout = function (object, ms, error) {\n    return Q(object).timeout(ms, error);\n};\n\nPromise.prototype.timeout = function (ms, error) {\n    var deferred = defer();\n    var timeoutId = setTimeout(function () {\n        if (!error || \"string\" === typeof error) {\n            error = new Error(error || \"Timed out after \" + ms + \" ms\");\n            error.code = \"ETIMEDOUT\";\n        }\n        deferred.reject(error);\n    }, ms);\n\n    this.then(function (value) {\n        clearTimeout(timeoutId);\n        deferred.resolve(value);\n    }, function (exception) {\n        clearTimeout(timeoutId);\n        deferred.reject(exception);\n    }, deferred.notify);\n\n    return deferred.promise;\n};\n\n/**\n * Returns a promise for the given value (or promised value), some\n * milliseconds after it resolved. Passes rejections immediately.\n * @param {Any*} promise\n * @param {Number} milliseconds\n * @returns a promise for the resolution of the given promise after milliseconds\n * time has elapsed since the resolution of the given promise.\n * If the given promise rejects, that is passed immediately.\n */\nQ.delay = function (object, timeout) {\n    if (timeout === void 0) {\n        timeout = object;\n        object = void 0;\n    }\n    return Q(object).delay(timeout);\n};\n\nPromise.prototype.delay = function (timeout) {\n    return this.then(function (value) {\n        var deferred = defer();\n        setTimeout(function () {\n            deferred.resolve(value);\n        }, timeout);\n        return deferred.promise;\n    });\n};\n\n/**\n * Passes a continuation to a Node function, which is called with the given\n * arguments provided as an array, and returns a promise.\n *\n *      Q.nfapply(FS.readFile, [__filename])\n *      .then(function (content) {\n *      })\n *\n */\nQ.nfapply = function (callback, args) {\n    return Q(callback).nfapply(args);\n};\n\nPromise.prototype.nfapply = function (args) {\n    var deferred = defer();\n    var nodeArgs = array_slice(args);\n    nodeArgs.push(deferred.makeNodeResolver());\n    this.fapply(nodeArgs).fail(deferred.reject);\n    return deferred.promise;\n};\n\n/**\n * Passes a continuation to a Node function, which is called with the given\n * arguments provided individually, and returns a promise.\n * @example\n * Q.nfcall(FS.readFile, __filename)\n * .then(function (content) {\n * })\n *\n */\nQ.nfcall = function (callback /*...args*/) {\n    var args = array_slice(arguments, 1);\n    return Q(callback).nfapply(args);\n};\n\nPromise.prototype.nfcall = function (/*...args*/) {\n    var nodeArgs = array_slice(arguments);\n    var deferred = defer();\n    nodeArgs.push(deferred.makeNodeResolver());\n    this.fapply(nodeArgs).fail(deferred.reject);\n    return deferred.promise;\n};\n\n/**\n * Wraps a NodeJS continuation passing function and returns an equivalent\n * version that returns a promise.\n * @example\n * Q.nfbind(FS.readFile, __filename)(\"utf-8\")\n * .then(console.log)\n * .done()\n */\nQ.nfbind =\nQ.denodeify = function (callback /*...args*/) {\n    var baseArgs = array_slice(arguments, 1);\n    return function () {\n        var nodeArgs = baseArgs.concat(array_slice(arguments));\n        var deferred = defer();\n        nodeArgs.push(deferred.makeNodeResolver());\n        Q(callback).fapply(nodeArgs).fail(deferred.reject);\n        return deferred.promise;\n    };\n};\n\nPromise.prototype.nfbind =\nPromise.prototype.denodeify = function (/*...args*/) {\n    var args = array_slice(arguments);\n    args.unshift(this);\n    return Q.denodeify.apply(void 0, args);\n};\n\nQ.nbind = function (callback, thisp /*...args*/) {\n    var baseArgs = array_slice(arguments, 2);\n    return function () {\n        var nodeArgs = baseArgs.concat(array_slice(arguments));\n        var deferred = defer();\n        nodeArgs.push(deferred.makeNodeResolver());\n        function bound() {\n            return callback.apply(thisp, arguments);\n        }\n        Q(bound).fapply(nodeArgs).fail(deferred.reject);\n        return deferred.promise;\n    };\n};\n\nPromise.prototype.nbind = function (/*thisp, ...args*/) {\n    var args = array_slice(arguments, 0);\n    args.unshift(this);\n    return Q.nbind.apply(void 0, args);\n};\n\n/**\n * Calls a method of a Node-style object that accepts a Node-style\n * callback with a given array of arguments, plus a provided callback.\n * @param object an object that has the named method\n * @param {String} name name of the method of object\n * @param {Array} args arguments to pass to the method; the callback\n * will be provided by Q and appended to these arguments.\n * @returns a promise for the value or error\n */\nQ.nmapply = // XXX As proposed by \"Redsandro\"\nQ.npost = function (object, name, args) {\n    return Q(object).npost(name, args);\n};\n\nPromise.prototype.nmapply = // XXX As proposed by \"Redsandro\"\nPromise.prototype.npost = function (name, args) {\n    var nodeArgs = array_slice(args || []);\n    var deferred = defer();\n    nodeArgs.push(deferred.makeNodeResolver());\n    this.dispatch(\"post\", [name, nodeArgs]).fail(deferred.reject);\n    return deferred.promise;\n};\n\n/**\n * Calls a method of a Node-style object that accepts a Node-style\n * callback, forwarding the given variadic arguments, plus a provided\n * callback argument.\n * @param object an object that has the named method\n * @param {String} name name of the method of object\n * @param ...args arguments to pass to the method; the callback will\n * be provided by Q and appended to these arguments.\n * @returns a promise for the value or error\n */\nQ.nsend = // XXX Based on Mark Miller's proposed \"send\"\nQ.nmcall = // XXX Based on \"Redsandro's\" proposal\nQ.ninvoke = function (object, name /*...args*/) {\n    var nodeArgs = array_slice(arguments, 2);\n    var deferred = defer();\n    nodeArgs.push(deferred.makeNodeResolver());\n    Q(object).dispatch(\"post\", [name, nodeArgs]).fail(deferred.reject);\n    return deferred.promise;\n};\n\nPromise.prototype.nsend = // XXX Based on Mark Miller's proposed \"send\"\nPromise.prototype.nmcall = // XXX Based on \"Redsandro's\" proposal\nPromise.prototype.ninvoke = function (name /*...args*/) {\n    var nodeArgs = array_slice(arguments, 1);\n    var deferred = defer();\n    nodeArgs.push(deferred.makeNodeResolver());\n    this.dispatch(\"post\", [name, nodeArgs]).fail(deferred.reject);\n    return deferred.promise;\n};\n\n/**\n * If a function would like to support both Node continuation-passing-style and\n * promise-returning-style, it can end its internal promise chain with\n * `nodeify(nodeback)`, forwarding the optional nodeback argument.  If the user\n * elects to use a nodeback, the result will be sent there.  If they do not\n * pass a nodeback, they will receive the result promise.\n * @param object a result (or a promise for a result)\n * @param {Function} nodeback a Node.js-style callback\n * @returns either the promise or nothing\n */\nQ.nodeify = nodeify;\nfunction nodeify(object, nodeback) {\n    return Q(object).nodeify(nodeback);\n}\n\nPromise.prototype.nodeify = function (nodeback) {\n    if (nodeback) {\n        this.then(function (value) {\n            Q.nextTick(function () {\n                nodeback(null, value);\n            });\n        }, function (error) {\n            Q.nextTick(function () {\n                nodeback(error);\n            });\n        });\n    } else {\n        return this;\n    }\n};\n\nQ.noConflict = function() {\n    throw new Error(\"Q.noConflict only works when Q is used as a global\");\n};\n\n// All code before this point will be filtered from stack traces.\nvar qEndingLine = captureLine();\n\nreturn Q;\n\n});\n","function select(element) {\n    var selectedText;\n\n    if (element.nodeName === 'SELECT') {\n        element.focus();\n\n        selectedText = element.value;\n    }\n    else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n        var isReadOnly = element.hasAttribute('readonly');\n\n        if (!isReadOnly) {\n            element.setAttribute('readonly', '');\n        }\n\n        element.select();\n        element.setSelectionRange(0, element.value.length);\n\n        if (!isReadOnly) {\n            element.removeAttribute('readonly');\n        }\n\n        selectedText = element.value;\n    }\n    else {\n        if (element.hasAttribute('contenteditable')) {\n            element.focus();\n        }\n\n        var selection = window.getSelection();\n        var range = document.createRange();\n\n        range.selectNodeContents(element);\n        selection.removeAllRanges();\n        selection.addRange(range);\n\n        selectedText = selection.toString();\n    }\n\n    return selectedText;\n}\n\nmodule.exports = select;\n","\n//Copyright 2014-2015 Google Inc. All rights reserved.\n\n//Use of this source code is governed by a BSD-style\n//license that can be found in the LICENSE file or at\n//https://developers.google.com/open-source/licenses/bsd\n\n/**\n * @fileoverview The U2F api.\n */\n'use strict';\n\n(function (){\n  var isChrome = 'chrome' in window && window.navigator.userAgent.indexOf('Edge') < 0;\n  if ('u2f' in window || !isChrome) {\n    return;\n  }\n\n  /** Namespace for the U2F api.\n   * @type {Object}\n   */\n  var u2f = window.u2f = {};\n\n  /**\n   * FIDO U2F Javascript API Version\n   * @number\n   */\n  var js_api_version;\n\n  /**\n   * The U2F extension id\n   * @const {string}\n   */\n  // The Chrome packaged app extension ID.\n  // Uncomment this if you want to deploy a server instance that uses\n  // the package Chrome app and does not require installing the U2F Chrome extension.\n   u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd';\n  // The U2F Chrome extension ID.\n  // Uncomment this if you want to deploy a server instance that uses\n  // the U2F Chrome extension to authenticate.\n  // u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne';\n\n\n  /**\n   * Message types for messsages to/from the extension\n   * @const\n   * @enum {string}\n   */\n  u2f.MessageTypes = {\n      'U2F_REGISTER_REQUEST': 'u2f_register_request',\n      'U2F_REGISTER_RESPONSE': 'u2f_register_response',\n      'U2F_SIGN_REQUEST': 'u2f_sign_request',\n      'U2F_SIGN_RESPONSE': 'u2f_sign_response',\n      'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request',\n      'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response'\n  };\n\n\n  /**\n   * Response status codes\n   * @const\n   * @enum {number}\n   */\n  u2f.ErrorCodes = {\n      'OK': 0,\n      'OTHER_ERROR': 1,\n      'BAD_REQUEST': 2,\n      'CONFIGURATION_UNSUPPORTED': 3,\n      'DEVICE_INELIGIBLE': 4,\n      'TIMEOUT': 5\n  };\n\n\n  /**\n   * A message for registration requests\n   * @typedef {{\n   *   type: u2f.MessageTypes,\n   *   appId: ?string,\n   *   timeoutSeconds: ?number,\n   *   requestId: ?number\n   * }}\n   */\n  u2f.U2fRequest;\n\n\n  /**\n   * A message for registration responses\n   * @typedef {{\n   *   type: u2f.MessageTypes,\n   *   responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse),\n   *   requestId: ?number\n   * }}\n   */\n  u2f.U2fResponse;\n\n\n  /**\n   * An error object for responses\n   * @typedef {{\n   *   errorCode: u2f.ErrorCodes,\n   *   errorMessage: ?string\n   * }}\n   */\n  u2f.Error;\n\n  /**\n   * Data object for a single sign request.\n   * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}}\n   */\n  u2f.Transport;\n\n\n  /**\n   * Data object for a single sign request.\n   * @typedef {Array<u2f.Transport>}\n   */\n  u2f.Transports;\n\n  /**\n   * Data object for a single sign request.\n   * @typedef {{\n   *   version: string,\n   *   challenge: string,\n   *   keyHandle: string,\n   *   appId: string\n   * }}\n   */\n  u2f.SignRequest;\n\n\n  /**\n   * Data object for a sign response.\n   * @typedef {{\n   *   keyHandle: string,\n   *   signatureData: string,\n   *   clientData: string\n   * }}\n   */\n  u2f.SignResponse;\n\n\n  /**\n   * Data object for a registration request.\n   * @typedef {{\n   *   version: string,\n   *   challenge: string\n   * }}\n   */\n  u2f.RegisterRequest;\n\n\n  /**\n   * Data object for a registration response.\n   * @typedef {{\n   *   version: string,\n   *   keyHandle: string,\n   *   transports: Transports,\n   *   appId: string\n   * }}\n   */\n  u2f.RegisterResponse;\n\n\n  /**\n   * Data object for a registered key.\n   * @typedef {{\n   *   version: string,\n   *   keyHandle: string,\n   *   transports: ?Transports,\n   *   appId: ?string\n   * }}\n   */\n  u2f.RegisteredKey;\n\n\n  /**\n   * Data object for a get API register response.\n   * @typedef {{\n   *   js_api_version: number\n   * }}\n   */\n  u2f.GetJsApiVersionResponse;\n\n\n  //Low level MessagePort API support\n\n  /**\n   * Sets up a MessagePort to the U2F extension using the\n   * available mechanisms.\n   * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback\n   */\n  u2f.getMessagePort = function(callback) {\n    if (typeof chrome != 'undefined' && chrome.runtime) {\n      // The actual message here does not matter, but we need to get a reply\n      // for the callback to run. Thus, send an empty signature request\n      // in order to get a failure response.\n      var msg = {\n          type: u2f.MessageTypes.U2F_SIGN_REQUEST,\n          signRequests: []\n      };\n      chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() {\n        if (!chrome.runtime.lastError) {\n          // We are on a whitelisted origin and can talk directly\n          // with the extension.\n          u2f.getChromeRuntimePort_(callback);\n        } else {\n          // chrome.runtime was available, but we couldn't message\n          // the extension directly, use iframe\n          u2f.getIframePort_(callback);\n        }\n      });\n    } else if (u2f.isAndroidChrome_()) {\n      u2f.getAuthenticatorPort_(callback);\n    } else if (u2f.isIosChrome_()) {\n      u2f.getIosPort_(callback);\n    } else {\n      // chrome.runtime was not available at all, which is normal\n      // when this origin doesn't have access to any extensions.\n      u2f.getIframePort_(callback);\n    }\n  };\n\n  /**\n   * Detect chrome running on android based on the browser's useragent.\n   * @private\n   */\n  u2f.isAndroidChrome_ = function() {\n    var userAgent = navigator.userAgent;\n    return userAgent.indexOf('Chrome') != -1 &&\n    userAgent.indexOf('Android') != -1;\n  };\n\n  /**\n   * Detect chrome running on iOS based on the browser's platform.\n   * @private\n   */\n  u2f.isIosChrome_ = function() {\n    return [\"iPhone\", \"iPad\", \"iPod\"].indexOf(navigator.platform) > -1;\n  };\n\n  /**\n   * Connects directly to the extension via chrome.runtime.connect.\n   * @param {function(u2f.WrappedChromeRuntimePort_)} callback\n   * @private\n   */\n  u2f.getChromeRuntimePort_ = function(callback) {\n    var port = chrome.runtime.connect(u2f.EXTENSION_ID,\n        {'includeTlsChannelId': true});\n    setTimeout(function() {\n      callback(new u2f.WrappedChromeRuntimePort_(port));\n    }, 0);\n  };\n\n  /**\n   * Return a 'port' abstraction to the Authenticator app.\n   * @param {function(u2f.WrappedAuthenticatorPort_)} callback\n   * @private\n   */\n  u2f.getAuthenticatorPort_ = function(callback) {\n    setTimeout(function() {\n      callback(new u2f.WrappedAuthenticatorPort_());\n    }, 0);\n  };\n\n  /**\n   * Return a 'port' abstraction to the iOS client app.\n   * @param {function(u2f.WrappedIosPort_)} callback\n   * @private\n   */\n  u2f.getIosPort_ = function(callback) {\n    setTimeout(function() {\n      callback(new u2f.WrappedIosPort_());\n    }, 0);\n  };\n\n  /**\n   * A wrapper for chrome.runtime.Port that is compatible with MessagePort.\n   * @param {Port} port\n   * @constructor\n   * @private\n   */\n  u2f.WrappedChromeRuntimePort_ = function(port) {\n    this.port_ = port;\n  };\n\n  /**\n   * Format and return a sign request compliant with the JS API version supported by the extension.\n   * @param {Array<u2f.SignRequest>} signRequests\n   * @param {number} timeoutSeconds\n   * @param {number} reqId\n   * @return {Object}\n   */\n  u2f.formatSignRequest_ =\n    function(appId, challenge, registeredKeys, timeoutSeconds, reqId) {\n    if (js_api_version === undefined || js_api_version < 1.1) {\n      // Adapt request to the 1.0 JS API\n      var signRequests = [];\n      for (var i = 0; i < registeredKeys.length; i++) {\n        signRequests[i] = {\n            version: registeredKeys[i].version,\n            challenge: challenge,\n            keyHandle: registeredKeys[i].keyHandle,\n            appId: appId\n        };\n      }\n      return {\n        type: u2f.MessageTypes.U2F_SIGN_REQUEST,\n        signRequests: signRequests,\n        timeoutSeconds: timeoutSeconds,\n        requestId: reqId\n      };\n    }\n    // JS 1.1 API\n    return {\n      type: u2f.MessageTypes.U2F_SIGN_REQUEST,\n      appId: appId,\n      challenge: challenge,\n      registeredKeys: registeredKeys,\n      timeoutSeconds: timeoutSeconds,\n      requestId: reqId\n    };\n  };\n\n  /**\n   * Format and return a register request compliant with the JS API version supported by the extension..\n   * @param {Array<u2f.SignRequest>} signRequests\n   * @param {Array<u2f.RegisterRequest>} signRequests\n   * @param {number} timeoutSeconds\n   * @param {number} reqId\n   * @return {Object}\n   */\n  u2f.formatRegisterRequest_ =\n    function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) {\n    if (js_api_version === undefined || js_api_version < 1.1) {\n      // Adapt request to the 1.0 JS API\n      for (var i = 0; i < registerRequests.length; i++) {\n        registerRequests[i].appId = appId;\n      }\n      var signRequests = [];\n      for (var i = 0; i < registeredKeys.length; i++) {\n        signRequests[i] = {\n            version: registeredKeys[i].version,\n            challenge: registerRequests[0],\n            keyHandle: registeredKeys[i].keyHandle,\n            appId: appId\n        };\n      }\n      return {\n        type: u2f.MessageTypes.U2F_REGISTER_REQUEST,\n        signRequests: signRequests,\n        registerRequests: registerRequests,\n        timeoutSeconds: timeoutSeconds,\n        requestId: reqId\n      };\n    }\n    // JS 1.1 API\n    return {\n      type: u2f.MessageTypes.U2F_REGISTER_REQUEST,\n      appId: appId,\n      registerRequests: registerRequests,\n      registeredKeys: registeredKeys,\n      timeoutSeconds: timeoutSeconds,\n      requestId: reqId\n    };\n  };\n\n\n  /**\n   * Posts a message on the underlying channel.\n   * @param {Object} message\n   */\n  u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) {\n    this.port_.postMessage(message);\n  };\n\n\n  /**\n   * Emulates the HTML 5 addEventListener interface. Works only for the\n   * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage.\n   * @param {string} eventName\n   * @param {function({data: Object})} handler\n   */\n  u2f.WrappedChromeRuntimePort_.prototype.addEventListener =\n      function(eventName, handler) {\n    var name = eventName.toLowerCase();\n    if (name == 'message' || name == 'onmessage') {\n      this.port_.onMessage.addListener(function(message) {\n        // Emulate a minimal MessageEvent object\n        handler({'data': message});\n      });\n    } else {\n      console.error('WrappedChromeRuntimePort only supports onMessage');\n    }\n  };\n\n  /**\n   * Wrap the Authenticator app with a MessagePort interface.\n   * @constructor\n   * @private\n   */\n  u2f.WrappedAuthenticatorPort_ = function() {\n    this.requestId_ = -1;\n    this.requestObject_ = null;\n  }\n\n  /**\n   * Launch the Authenticator intent.\n   * @param {Object} message\n   */\n  u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) {\n    var intentUrl =\n      u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ +\n      ';S.request=' + encodeURIComponent(JSON.stringify(message)) +\n      ';end';\n    document.location = intentUrl;\n  };\n\n  /**\n   * Tells what type of port this is.\n   * @return {String} port type\n   */\n  u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() {\n    return \"WrappedAuthenticatorPort_\";\n  };\n\n\n  /**\n   * Emulates the HTML 5 addEventListener interface.\n   * @param {string} eventName\n   * @param {function({data: Object})} handler\n   */\n  u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) {\n    var name = eventName.toLowerCase();\n    if (name == 'message') {\n      var self = this;\n      /* Register a callback to that executes when\n       * chrome injects the response. */\n      window.addEventListener(\n          'message', self.onRequestUpdate_.bind(self, handler), false);\n    } else {\n      console.error('WrappedAuthenticatorPort only supports message');\n    }\n  };\n\n  /**\n   * Callback invoked  when a response is received from the Authenticator.\n   * @param function({data: Object}) callback\n   * @param {Object} message message Object\n   */\n  u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ =\n      function(callback, message) {\n    var messageObject = JSON.parse(message.data);\n    var intentUrl = messageObject['intentURL'];\n\n    var errorCode = messageObject['errorCode'];\n    var responseObject = null;\n    if (messageObject.hasOwnProperty('data')) {\n      responseObject = /** @type {Object} */ (\n          JSON.parse(messageObject['data']));\n    }\n\n    callback({'data': responseObject});\n  };\n\n  /**\n   * Base URL for intents to Authenticator.\n   * @const\n   * @private\n   */\n  u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ =\n    'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE';\n\n  /**\n   * Wrap the iOS client app with a MessagePort interface.\n   * @constructor\n   * @private\n   */\n  u2f.WrappedIosPort_ = function() {};\n\n  /**\n   * Launch the iOS client app request\n   * @param {Object} message\n   */\n  u2f.WrappedIosPort_.prototype.postMessage = function(message) {\n    var str = JSON.stringify(message);\n    var url = \"u2f://auth?\" + encodeURI(str);\n    location.replace(url);\n  };\n\n  /**\n   * Tells what type of port this is.\n   * @return {String} port type\n   */\n  u2f.WrappedIosPort_.prototype.getPortType = function() {\n    return \"WrappedIosPort_\";\n  };\n\n  /**\n   * Emulates the HTML 5 addEventListener interface.\n   * @param {string} eventName\n   * @param {function({data: Object})} handler\n   */\n  u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) {\n    var name = eventName.toLowerCase();\n    if (name !== 'message') {\n      console.error('WrappedIosPort only supports message');\n    }\n  };\n\n  /**\n   * Sets up an embedded trampoline iframe, sourced from the extension.\n   * @param {function(MessagePort)} callback\n   * @private\n   */\n  u2f.getIframePort_ = function(callback) {\n    // Create the iframe\n    var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID;\n    var iframe = document.createElement('iframe');\n    iframe.src = iframeOrigin + '/u2f-comms.html';\n    iframe.setAttribute('style', 'display:none');\n    document.body.appendChild(iframe);\n\n    var channel = new MessageChannel();\n    var ready = function(message) {\n      if (message.data == 'ready') {\n        channel.port1.removeEventListener('message', ready);\n        callback(channel.port1);\n      } else {\n        console.error('First event on iframe port was not \"ready\"');\n      }\n    };\n    channel.port1.addEventListener('message', ready);\n    channel.port1.start();\n\n    iframe.addEventListener('load', function() {\n      // Deliver the port to the iframe and initialize\n      iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]);\n    });\n  };\n\n\n  //High-level JS API\n\n  /**\n   * Default extension response timeout in seconds.\n   * @const\n   */\n  u2f.EXTENSION_TIMEOUT_SEC = 30;\n\n  /**\n   * A singleton instance for a MessagePort to the extension.\n   * @type {MessagePort|u2f.WrappedChromeRuntimePort_}\n   * @private\n   */\n  u2f.port_ = null;\n\n  /**\n   * Callbacks waiting for a port\n   * @type {Array<function((MessagePort|u2f.WrappedChromeRuntimePort_))>}\n   * @private\n   */\n  u2f.waitingForPort_ = [];\n\n  /**\n   * A counter for requestIds.\n   * @type {number}\n   * @private\n   */\n  u2f.reqCounter_ = 0;\n\n  /**\n   * A map from requestIds to client callbacks\n   * @type {Object.<number,(function((u2f.Error|u2f.RegisterResponse))\n   *                       |function((u2f.Error|u2f.SignResponse)))>}\n   * @private\n   */\n  u2f.callbackMap_ = {};\n\n  /**\n   * Creates or retrieves the MessagePort singleton to use.\n   * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback\n   * @private\n   */\n  u2f.getPortSingleton_ = function(callback) {\n    if (u2f.port_) {\n      callback(u2f.port_);\n    } else {\n      if (u2f.waitingForPort_.length == 0) {\n        u2f.getMessagePort(function(port) {\n          u2f.port_ = port;\n          u2f.port_.addEventListener('message',\n              /** @type {function(Event)} */ (u2f.responseHandler_));\n\n          // Careful, here be async callbacks. Maybe.\n          while (u2f.waitingForPort_.length)\n            u2f.waitingForPort_.shift()(u2f.port_);\n        });\n      }\n      u2f.waitingForPort_.push(callback);\n    }\n  };\n\n  /**\n   * Handles response messages from the extension.\n   * @param {MessageEvent.<u2f.Response>} message\n   * @private\n   */\n  u2f.responseHandler_ = function(message) {\n    var response = message.data;\n    var reqId = response['requestId'];\n    if (!reqId || !u2f.callbackMap_[reqId]) {\n      console.error('Unknown or missing requestId in response.');\n      return;\n    }\n    var cb = u2f.callbackMap_[reqId];\n    delete u2f.callbackMap_[reqId];\n    cb(response['responseData']);\n  };\n\n  /**\n   * Dispatches an array of sign requests to available U2F tokens.\n   * If the JS API version supported by the extension is unknown, it first sends a\n   * message to the extension to find out the supported API version and then it sends\n   * the sign request.\n   * @param {string=} appId\n   * @param {string=} challenge\n   * @param {Array<u2f.RegisteredKey>} registeredKeys\n   * @param {function((u2f.Error|u2f.SignResponse))} callback\n   * @param {number=} opt_timeoutSeconds\n   */\n  u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {\n    if (js_api_version === undefined) {\n      // Send a message to get the extension to JS API version, then send the actual sign request.\n      u2f.getApiVersion(\n          function (response) {\n            js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version'];\n            console.log(\"Extension JS API Version: \", js_api_version);\n            u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);\n          });\n    } else {\n      // We know the JS API version. Send the actual sign request in the supported API version.\n      u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);\n    }\n  };\n\n  /**\n   * Dispatches an array of sign requests to available U2F tokens.\n   * @param {string=} appId\n   * @param {string=} challenge\n   * @param {Array<u2f.RegisteredKey>} registeredKeys\n   * @param {function((u2f.Error|u2f.SignResponse))} callback\n   * @param {number=} opt_timeoutSeconds\n   */\n  u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {\n    u2f.getPortSingleton_(function(port) {\n      var reqId = ++u2f.reqCounter_;\n      u2f.callbackMap_[reqId] = callback;\n      var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?\n          opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);\n      var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId);\n      port.postMessage(req);\n    });\n  };\n\n  /**\n   * Dispatches register requests to available U2F tokens. An array of sign\n   * requests identifies already registered tokens.\n   * If the JS API version supported by the extension is unknown, it first sends a\n   * message to the extension to find out the supported API version and then it sends\n   * the register request.\n   * @param {string=} appId\n   * @param {Array<u2f.RegisterRequest>} registerRequests\n   * @param {Array<u2f.RegisteredKey>} registeredKeys\n   * @param {function((u2f.Error|u2f.RegisterResponse))} callback\n   * @param {number=} opt_timeoutSeconds\n   */\n  u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {\n    if (js_api_version === undefined) {\n      // Send a message to get the extension to JS API version, then send the actual register request.\n      u2f.getApiVersion(\n          function (response) {\n            js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version'];\n            console.log(\"Extension JS API Version: \", js_api_version);\n            u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,\n                callback, opt_timeoutSeconds);\n          });\n    } else {\n      // We know the JS API version. Send the actual register request in the supported API version.\n      u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,\n          callback, opt_timeoutSeconds);\n    }\n  };\n\n  /**\n   * Dispatches register requests to available U2F tokens. An array of sign\n   * requests identifies already registered tokens.\n   * @param {string=} appId\n   * @param {Array<u2f.RegisterRequest>} registerRequests\n   * @param {Array<u2f.RegisteredKey>} registeredKeys\n   * @param {function((u2f.Error|u2f.RegisterResponse))} callback\n   * @param {number=} opt_timeoutSeconds\n   */\n  u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {\n    u2f.getPortSingleton_(function(port) {\n      var reqId = ++u2f.reqCounter_;\n      u2f.callbackMap_[reqId] = callback;\n      var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?\n          opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);\n      var req = u2f.formatRegisterRequest_(\n          appId, registeredKeys, registerRequests, timeoutSeconds, reqId);\n      port.postMessage(req);\n    });\n  };\n\n\n  /**\n   * Dispatches a message to the extension to find out the supported\n   * JS API version.\n   * If the user is on a mobile phone and is thus using Google Authenticator instead\n   * of the Chrome extension, don't send the request and simply return 0.\n   * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback\n   * @param {number=} opt_timeoutSeconds\n   */\n  u2f.getApiVersion = function(callback, opt_timeoutSeconds) {\n   u2f.getPortSingleton_(function(port) {\n     // If we are using Android Google Authenticator or iOS client app,\n     // do not fire an intent to ask which JS API version to use.\n     if (port.getPortType) {\n       var apiVersion;\n       switch (port.getPortType()) {\n         case 'WrappedIosPort_':\n         case 'WrappedAuthenticatorPort_':\n           apiVersion = 1.1;\n           break;\n\n         default:\n           apiVersion = 0;\n           break;\n       }\n       callback({ 'js_api_version': apiVersion });\n       return;\n     }\n      var reqId = ++u2f.reqCounter_;\n      u2f.callbackMap_[reqId] = callback;\n      var req = {\n        type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST,\n        timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ?\n            opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC),\n        requestId: reqId\n      };\n      port.postMessage(req);\n    });\n  };\n})();\n"],"names":["OptionsConstructor","createIdxOptionsConstructor","StorageManager","createIdxStorageManager","IdxTransactionManager","createIdxTransactionManager","OktaAuthOAuth","createOktaAuthOAuth","OktaAuth","mixinIdx","mixinAuthn","OktaAuthIdx","commonjsGlobal","globalThis","window","global","self","getDefaultExportFromCjs","x","__esModule","Object","prototype","hasOwnProperty","call","handlebars_runtime","exports","base","utils","extend","indexOf","array","value","i","len","length","escapeExpression","string","toHTML","possible","test","replace","badChars","escapeChar","isEmpty","isArray","createFrame","object","frame","_parent","blockParams","params","ids","path","appendContextPath","contextPath","id","escape","chr","obj","arguments","key","toString","isFunction","Array","exception","module","errorProps","Exception","message","node","loc","line","undefined","endLineNumber","column","endColumn","start","end","tmp","Error","constructor","this","idx","captureStackTrace","lineNumber","defineProperty","enumerable","nop","helpers","blockHelperMissing","_utils","instance","registerHelper","context","options","inverse","fn","name","each","data","_exception2","priorKey","ret","execIteration","field","index","last","first","j","Symbol","iterator","newContext","it","next","done","push","keys","forEach","helperMissing","_if","conditional","hash","includeZero","log","args","level","apply","lookup","lookupProperty","_with","_interopRequireDefault","registerDefaultHelpers","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","moveHelperToHooks","helperName","keepHelper","hooks","decorators","inline","registerDecorator","props","container","partials","original","registerDefaultDecorators","_decoratorsInline2","logger","methodMap","lookupLevel","levelMap","toLowerCase","parseInt","console","method","_len","_key","protoAccess","createNewLookupObject","createNewLookupObject$1","sources","create","concat","createProtoAccessControl","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","properties","whitelist","_createNewLookupObject","allowedProtoProperties","defaultValue","allowProtoPropertiesByDefault","methods","allowedProtoMethods","allowProtoMethodsByDefault","resultIsAllowed","result","protoAccessControl","propertyName","protoAccessControlForType","loggedProperties","logUnexpecedPropertyAccessOnce","checkWhiteList","resetLoggedProperties","newObj","_interopRequireWildcard","logger$1","HandlebarsEnvironment","_helpers","_decorators","_logger2","_internalProtoAccess","VERSION","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","objectType","unregisterHelper","registerPartial","partial","unregisterPartial","unregisterDecorator","resetLoggedPropertyAccesses","safeString","SafeString","runtime","wrapHelper","wrapHelper$1","helper","transformOptionsFn","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","template","templateSpec","env","main","decorator","main_d","VM","compiler","templateWasPrecompiledWithCompilerV7","strict","parent","depths","lambda","current","Utils","invokePartial","resolvePartial","extendedOptions","compile","compilerOptions","indent","lines","split","l","join","programs","program","declaredBlockParams","programWrapper","wrapProgram","depth","mergeIfNeeded","param","common","nullContext","seal","noop","_setup","useData","root","initData","useBlockParams","useDepths","executeDecorators","isTop","mergedHelpers","_internalWrapHelper","passLookupPropertyOption","wrapHelpersToPassLookupProperty","usePartial","useDecorators","keepHelperInHelpers","allowCallsToHelperMissing","_child","currentPartialBlock","partialBlock","Function","prog","currentDepths","noConflict","Handlebars","$Handlebars","base$1","_handlebarsSafeString2","_handlebarsException2","runtime$1","_handlebarsNoConflict2","hb","spec","inst","_Handlebars2","underscoreMin","n","r","t","e","u","o","slice","a","f","c","ArrayBuffer","DataView","s","p","v","h","isView","y","isNaN","d","isFinite","g","propertyIsEnumerable","b","m","Math","pow","max","_","w","A","S","O","M","E","B","N","I","T","k","document","childNodes","Int8Array","D","R","F","V","Map","P","q","getInt8","buffer","U","W","z","L","$","C","K","J","G","H","Q","X","Y","Z","contains","nn","rn","tn","_wrapped","en","Uint8Array","byteOffset","valueOf","toJSON","String","un","on","pop","an","hn","cn","sn","pn","vn","yn","dn","gn","bn","mn","jn","_n","wn","sort","An","xn","Sn","On","Mn","En","Bn","Nn","toPath","In","Tn","kn","Dn","Rn","Fn","Vn","Pn","qn","iteratee","Un","Wn","floor","random","zn","Date","now","getTime","Ln","RegExp","$n","Cn","Kn","Jn","templateSettings","evaluate","interpolate","Gn","Hn","Qn","Xn","Yn","Zn","nr","rr","placeholder","tr","TypeError","er","ur","or","ir","setTimeout","ar","fr","cr","lr","sr","pr","vr","hr","yr","dr","min","gr","br","mr","jr","_r","wr","Ar","xr","Sr","Or","Mr","Er","Br","Nr","Ir","Tr","kr","Dr","Rr","Fr","Vr","Pr","qr","Ur","Wr","zr","Lr","$r","Cr","Kr","Jr","Gr","Hr","Qr","Xr","_chain","chain","Yr","Zr","__proto__","restArguments","isObject","isNull","isUndefined","isBoolean","isElement","nodeType","isString","isNumber","isDate","isRegExp","isError","isSymbol","isArrayBuffer","isDataView","isArguments","parseFloat","isTypedArray","isMatch","isEqual","isMap","isWeakMap","isSet","isWeakSet","allKeys","values","pairs","invert","functions","extendOwn","assign","defaults","clone","tap","get","has","mapObject","identity","constant","property","propertyOf","matcher","matches","times","unescape","source","variable","uniqueId","bind","bindAll","memoize","cache","delay","defer","throttle","leading","clearTimeout","trailing","cancel","debounce","wrap","negate","compose","after","before","once","findKey","findIndex","findLastIndex","sortedIndex","lastIndexOf","find","detect","findWhere","map","collect","reduce","foldl","inject","reduceRight","foldr","filter","select","reject","every","all","some","any","includes","include","invoke","pluck","where","shuffle","sample","sortBy","criteria","groupBy","indexBy","countBy","partition","toArray","match","size","pick","omit","head","take","initial","rest","tail","drop","compact","Boolean","flatten","without","uniq","unique","union","intersection","difference","unzip","transpose","zip","range","ceil","chunk","mixin","default","resultCtx","isInteger","oktaUnderscore","backbone","jQuery","factory","Backbone","previousBackbone","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","events","callback","opts","names","_events","onApi","ctx","listening","_listeners","interop","listenTo","_listenId","listeningTo","_listeningTo","Listening","error","tryCatchOn","handlers","count","off","offApi","listeners","stopListening","remaining","handler","_callback","cleanup","onceMap","listenToOnce","offer","trigger","triggerApi","objEvents","allEvents","triggerEvents","ev","a1","a2","a3","listener","unbind","Model","attributes","attrs","preinitialize","cid","cidPrefix","collection","parse","set","changed","initialize","validationError","idAttribute","sync","attr","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","prev","_pending","clear","hasChanged","changedAttributes","diff","old","previous","previousAttributes","fetch","model","success","resp","serverAttrs","wrapError","save","wait","validate","isNew","patch","xhr","destroy","url","urlError","encodeURIComponent","isValid","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","insert","at","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","unshift","shift","_byId","modelId","callbackOpts","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","_onModelEvent","event","prevId","$$iterator","kind","_collection","_kind","_index","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","delegate","eventName","undelegate","_createElement","createElement","className","_setAttributes","addUnderscoreMethods","Class","attribute","cb","defaultVal","addMethod","modelMatcher","config","Base","mappings","memo","type","dataType","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","exec","decodeURIComponent","History","checkUrl","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","pathname","getSearch","matchRoot","decodeFragment","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","rootPath","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","decodedFragment","title","_updateHash","protoProps","staticProps","child","__super__","STATE","FETCH_DATA","PAGINATION_DATA","DEFAULT_PARAMS","LINK_BY_HEADER","collectionProps","state","defaultParams","isCourageModel","status","links","header","paramexp","rels","substring","link","rel","paramsplit","parseLinkHeader","getResponseHeader","setPagination","setLinkHeadersPagination","fromFetch","abort","rawQueryStr","queryString","parts","parseQuery","getFetchData","getPaginationData","hasMore","fetchMore","isCourageCollection","baseCollectionProps","secureJSON","BaseCollection","objectTypeFields","target","createMessage","msg","normalizeSchemaDef","required","_validateRegex","pattern","StringFormatValidators","email","ERROR_INVALID_FORMAT_EMAIL","uri","ERROR_INVALID_FORMAT_URI","ipv4","ERROR_INVALID_FORMAT_IPV4","hostname","ERROR_INVALID_FORMAT_HOSTNAME","validateField","checkType","errorMessage","createMessageWith","isDefined","output","foundError","item","flags","passed","ERROR_BLANK","letter","toUpperCase","ERROR_WRONG_TYPE","invalidFormat","validator","format","validateStringFormat","minLength","ERROR_STRING_STRING_MIN_LENGTH","maxLength","ERROR_STRING_STRING_MAX_LENGTH","validateString","ERROR_NOT_ALLOWED","ERROR_INVALID","arr","minItems","maxItems","uniqueItems","ERROR_IARRAY_UNIQUE","items","arrayField","validateArrayField","derived","local","flat","schema","computedProperties","schemaDef","localDefaults","res","_validateSchema","__getDerivedValue","deps","isModelPropertySchema","__syncedData","allows","getPropertySchema","propName","errorFields","verbose","part","ref","isSynced","FrameworkModel","_builtInLocalProps","__edit__","__pending__","_setSynced","hasProps","__attributes","sanitizeAttributes","newModel","_syncedData","_getSynced","BaseModel","ComputedProperty","text","converters","str","oktaJQueryStatic","jQueryCourage","hasFullCorsSupport","XMLHttpRequest","hasXDomainRequest","XDomainRequest","corsIsNotSupported","corsIsNotEnabled","jqXhr","localStorageIsNotSupported","localStorage","setItem","removeItem","supportsPushState","win","isIE","navigator","userAgent","isFirefox","isEdge","isSafari","isMac","platform","isAndroid","isIOS","MSStream","getUserLanguages","languages","STORAGE_KEY","getCachedLanguages","storage","getItem","version","fetchJson","bundle","language","assets","languageCode","rewrite","encodeURI","baseUrl","headers","Accept","mode","then","txt","login","country","courage","currentLanguage","isLoaded","loadLanguage","overrides","supportedLanguages","parsedOverrides","i18n","i18nWithLowerCaseKeys","mapped","parseOverrides","lowerCaseLanguage","defaultLanguage","localStorageIsSupported","BrowserFeatures","cached","spread","loginJson","countryJson","addLanguageToCache","catch","Logger","getBundles","bundles","entityMap","emailValidator","parseLocale","locale","getRawLocale","okta","getBundle","bundleName","Bundles","IECustomEvent","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","emitL10nError","reason","CustomEvent","dispatchEvent","StringUtil","getParsedLocale","isLocaleBundleExist","parsedLocale","sprintf","oldValue","triggerError","entity","regex","query","encodeJSObject","jsObj","decodeJSObject","unescapeHtml","getTemplate","localize","number","int","parseObject","isPlainObject","randomString","characters","stringArray","endsWith","ends","isEmail","trim","SchemaUtils","STRING","NUMBER","INTEGER","BOOLEAN","OBJECT","FORMATDISPLAYTYPE","timezone","ARRAYDISPLAYTYPE","arrayofobject","arrayofstring","arrayofnumber","arrayofinteger","DISPLAYTYPES","date","boolean","integer","reference","image","password","SUPPORTSMINMAX","SUPPORTENUM","DATATYPE","MUTABILITY","READONLY","WRITEONLY","READWRITE","IMMUTABLE","SCOPE","NONE","SELF","SYSTEM","DISPLAYSCOPE","NA","UNION","DISABLE","ENABLE","UNION_OPTIONS","PERMISSION","HIDE","READ_ONLY","WRITE_ONLY","READ_WRITE","ENDUSER_ATTRIBUTE_PERMISSION_OPTIONS","ATTRIBUTE_LEVEL_MASTERING_OPTIONS","INHERIT","OKTA_MASTERED","OVERRIDE","USERNAMETYPE","OKTA_TO_APP","OKTA_TO_AD","APP_TO_OKTA","IDP_TO_OKTA","LOGINPATTERNFORMAT","EMAIL","CUSTOM","UNIQUENESS","NOT_UNIQUE","PENDING_UNIQUENESS","UNIQUE_VALIDATED","getDisplayType","itemType","displayType","getSourceUsernameType","mappingDirection","targetName","appName","sourceUsernameType","isArrayDataType","isObjectDataType","NAME","ENUM_KEY_PREFIX","getDropdownOptionsFromOneOf","isOneOfEnumObject","convertIndexToEnumIndex","convertToOneOf","const","convertEnumToOneOf","convertEnumObjectToOneOf","valueToTitle","enumObjectToValue","enumOneOf","oneOfObj","valueToEnumObject","enumValue","valuesToEnumObjects","enumObjectsToValues","EnumTypeHelper","getEnumInputOptions","enumValues","inputOptions","label","readOnly","customExplain","explain","to","from","input","getDropdownOptions","isConstraintValueMatchType","isStringConstraint","isNumberConstraint","isIntegerConstraint","isObjectConstraint","SchemaPropertySubSchema","description","SchemaPropertySubSchemaCollection","SchemaPropertySubSchemaAllOfCollection","_type","SchemaPropertySubSchemaOneOfCollection","SchemaPropertySubSchemaNoneOfCollection","constraintTypeErrorMessages","escapedLoginCharsRe","constraintHandlers","between","greaterThan","lessThan","equals","SchemaPropertySchemaProperty","__oneOf__","subSchemas","settings","permissions","__metadata__","__isSensitive__","sensitive","__isPendingSensitive__","__unique__","__isUniqueValidated__","__isPendingUniqueness__","__isUniqueness__","isValidated","isPending","__canBeSensitive__","metadata","sensitivizable","__userPermission__","__displayType__","__displayTypeLabel__","__supportsMinMax__","__isReadOnly__","mutability","__isWriteOnly__","__displayScope__","__isScopeSelf__","scope","__isNoneScopeArrayType__","isScopeSelf","__isImported__","externalName","__isFromBaseSchema__","schemaMeta","__enumDefined__","__supportEnum__","__isNumberTypeEnum__","__isIntegerTypeEnum__","__isObjectTypeEnum__","__isStringTypeEnum__","__enumConstraintType__","isStringType","isNumberType","isIntegerType","isObjectType","__isEnumDefinedAndSupported__","enumDefined","supportEnum","__isLoginOfBaseSchema__","isFromBaseSchema","__isLoginFormatRestrictionToEmail__","loginFormatRestriction","_updateTypeFormatConstraints","_updateDisplayType","_updateMinMax","_convertEqualsToMinMax","_setConstraintText","_setLoginPattern","extendedType","_setRangeConstraints","_setMasterOverride","_setSubSchemas","_setUniqueness","enumValidationError","_validateEnumOneOf","constraitType","constraitHandler","_checkBetweenConstraints","minVal","maxVal","__minVal__","__maxVal__","_checkIntegerConstraints","_checkGreaterThanConstraint","_checkLessThanConstraint","_checkEqualsConstraint","masterOverride","masterOverrideValue","minimum","maximum","allOf","oneOf","noneOf","_extractLoginPattern","arraytype","elementType","getArrayTypeName","_isValidateOneOfConstraint","constraintType","json","_enumAssignment","_attributeOverrideToJson","_normalizeUnionValue","_patternAssignment","_uniquenessAssignment","masterOverrideType","overrideProfile","_getEnumOneOfWithTitleCheck","enum","_buildLoginPattern","_escapedRegexChar","char","constraint","isEnumType","getEnumValues","detectHasEnumDefined","SchemaProperty","areAllReadOnly","createModelProperties","schemaProperty","parseProperties","__metadata","BaseSchemaSchema","displayName","getProperties","trimProperty","BaseSchemaSchemas","BaseSchema","debug","trace","dir","time","timeEnd","group","groupEnd","assert","info","warn","theme","orgId","orgName","serverStatus","persona","isDeveloperConsole","isPreview","features","_features","hasFeature","feature","hasAnyFeature","featureArray","hasPermission","permission","isDsTheme","SettingsModel","CHILDREN","RENDERED","PARENT","CHILD_DEFINITIONS","ADD_TO_CONTAINER","getIndex","view","proto","children","__original_initialize__","childDefinition","autoRender","isEventPropertyRe","matchKeys","bindings","callbacks","unregister","viewIndex","bubble","prepend","extraOptions","unescapingRexExp","prop","html","empty","append","rendered","removeChildren","compileTemplate","renderTemplate","getTemplateData","modelData","preRender","doRender","postRender","getChildren","methodName","isCourageView","FrameworkView","TemplateUtil","tpl","eventBus","broadcast","listen","notify","confirm","okfn","cancelfn","subtitle","ok","cancelFn","alert","noCancelButton","BaseView","decorate","TargetView","BaseViewView","hide","fade","width","dismissable","Notification","preventDefault","fadeOut","depth0","stack1","alias1","alias2","alias3","alias4","addClass","getRoute","_notify","_confirm","dialog","notification","Controller","unload","controller","BaseRouter","StateMachine","stateData","clean","MainView","BaseController","calcDoWhen","modelValue","ViewUtil","doWhen","toggle","animate","changeEventString","_doWhen","disabledEvents","click","stopPropagation","BaseButtonLink","additionalAttr","__getAttribute","visible","enabled","enableWhen","showWhen","disabled","icon","toggleVisible","enable","disable","show","bool","toggleClass","hidden","normalizeEvents","ButtonFactory","js_cookie","init","converter","api","expires","setMilliseconds","getMilliseconds","write","cookie","toUTCString","domain","secure","cookies","rdecode","getJSON","withConverter","Cookie","SECURED_COOKIE","setCookie","Cookie$1","getCookie","removeCookie","Clipboard","clipboard","OPTIONS","ClipboardClipboardWrapper","__instance","__setCallback","Clipboard$1","attach","Keys","UP","DOWN","DEL","TAB","RETURN","ENTER","ESC","COMMA","PAGEUP","PAGEDOWN","SPACE","BACKSPACE","__isKey","which","keyCode","isEnter","isEsc","isSpaceBar","Util","redirect","reloadPage","reload","constantError","getUrlQueryString","queries","queriesString","isABaseView","clonedEscapeExpression","hbsEscape","code","tags","tag","localizedValue","escapedString","tagValue","escapedBeginningTag","escapedEndTag","beginningTag","endTag","replaceTagsWithPlaceholders","err","ListView","addItem","fetchCollection","itemSelector","addShowMore","Backbone_ListView","optionsTemplate","BaseDropDownDropDownOption","action","seleniumId","BaseDropDown","option","addOption","screenReaderText","LABEL_OPTIONS","CONTAINER_OPTIONS","WRAPPER_OPTIONS","INPUT_OPTIONS","ALL_OPTIONS","SAVE_BUTTON_PHASES","decorateDoWhen","FormUtil","generateInputOptions","form","createFn","inputs","isReadOnly","hasReadMode","fieldNames","createReadFormButton","ariaLabel","formTitle","createButton","timeoutId","intervalId","phaseCount","keyup","removeClass","mousedown","mouseup","__changeSaveText","__showLoadingText","validateInput","applyShowWhen","toggleAndResize","applyToggleWhen","toggleWhen","ReadModeBar","modelEvents","addButton","buttonOrder","buttonConfigs","__getButtonOrder","buttonName","buttonsToSkip","noSubmitButton","hasPrevStep","Toolbar","ErrorBanner","FIELD_REGEX","ErrorParser","getResponseJSON","responseJSON","responseText","parseErrorSummary","errorSummary","parseErrorCauseObject","errorCause","localizedMsg","apiMsg","parseErrors","errorCauses","parseFieldErrors","errors","cause","fieldName","InputContainer","wide","multi","_getNames","inputItem","_getInputElement","lastInput","inputId","explainTop","__setExplain","__setError","__clearError","__errorState","errorId","__getHTMLForError","$elExplain","not","tmpl","iconLabel","multirowError","focus","registry","isBaseInput","editMode","readMode","InputRegistry","register","createInput","Input","InputFactory","qtip","TRUE","QTIP","PROTOTYPE","CORNER","CHECKS","trackingBound","FALSE","NULL","WIDTH","HEIGHT","TOP","LEFT","BOTTOM","RIGHT","CENTER","SHIFT","PLUGINS","NAMESPACE","ATTR_HAS","ATTR_ID","WIDGET","SELECTOR","INACTIVE_EVENTS","CLASS_FIXED","CLASS_DEFAULT","CLASS_FOCUS","CLASS_HOVER","CLASS_DISABLED","replaceSuffix","oldtitle","BROWSER","ie","innerHTML","getElementsByTagName","NaN","iOS","QTip","tooltip","elements","_id","timers","img","plugins","onTooltip","lastClass","destroyed","waiting","hiddenDuringWait","positioning","triggering","invalidOpt","invalidContent","jquery","sanitizeOptions","content","loading","deferred","newContent","button","position","my","ready","classes","sanitize","convertNotation","notation","levels","setCallback","category","rule","checks","_when","deferreds","when","posOptions","posClass","_createPosClass","height","adjust","mouse","appendTo","_createTitle","_updateTitle","_createButton","_updateContent","_setWidget","_unassignEvents","_assignEvents","_trigger","immediate","process","timer","removeData","removeAttr","suppress","one","proxy","builtin","nextid","newId","_removeTitle","_updateButton","css","precedance","rmove","rrender","reposition","offsetWidth","_update","visibility","_waitForContent","images","imagesLoaded","Deferred","resolve","promise","titlebar","widget","createWidgetClass","substr","abbrev","effect","pluginCalculations","offset","adjusted","newClass","viewport","tooltipWidth","outerWidth","tooltipHeight","outerHeight","targetWidth","targetHeight","left","top","isScroll","doc","ownerDocument","distance","origin","pageX","innerWidth","documentElement","clientWidth","pageY","scrollX","scrollLeft","scrollY","scrollTop","eq","innerHeight","imagemap","is","svg","ownerSVGElement","adjustable","elem","queue","opacity","removeAttribute","pos","scrolled","parentOffset","overflow","quirks","compatMode","scroll","getBoundingClientRect","offsetParent","Corner","corner","forceY","cls","duration","showMethod","hasClass","hideMethod","relatedTarget","ontoTooltip","closest","ontoTarget","fixed","stopImmediatePropagation","inactiveMethod","inactive","repositionMethod","center","fix","identicalState","allow","contentOptions","sameTarget","search","_storeMouse","solo","Event","blur","autofocus","fadeTo","qtips","curIndex","zIndex","newIndex","zindex","def","_bind","targets","suffix","ns","_unbind","originalEvent","isDefaultPrevented","_bindEvents","showEvents","hideEvents","showTargets","hideTargets","showCallback","hideCallback","similarTargets","toggleEvents","showIndex","inArray","_assignInitialEvents","showTarget","hideTarget","hoverIntent","hoverEvent","prerender","moveEvent","onTarget","containerTarget","viewportTarget","documentTarget","windowTarget","leave","nodeName","isAncestor","parents","inactiveEvents","limit","abs","resize","special","grep","currentTarget","newValue","command","returned","makeArray","timeStamp","docBody","newTarget","metadata5","html5","parseJSON","overwrite","keepData","elems","func","ui","cleanData","triggerHandler","move","TIP","createVML","SCALE","PIXEL_RATIO","BACKING_STORE_RATIO","MARGIN","BORDER","COLOR","BG_COLOR","TRANSPARENT","IMPORTANT","HASCANVAS","getContext","INVALID","camel","cssProps","cssPrefixes","intCss","cur","ucProp","vendorCss","Tip","_ns","devicePixelRatio","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","tip","prependTo","lineJoin","miterLimit","_swapDimensions","_resetDimensions","_useTitle","_parseCorner","_parseWidth","side","use","_parseRadius","_invalidColour","compare","_parseColours","borderSide","colorElem","color","_calculateSize","ratio","isCenter","round","smallHyp","sqrt","hyp","border","reverse","_calculateTip","scale","width2","height2","tips","bl","tl","tc","bc","rc","lc","lt","rt","lb","rb","_drawCoords","coords","beginPath","moveTo","lineTo","closePath","bigCoords","translate","newSize","inner","curSize","mimic","lineHeight","restore","clearRect","fillStyle","fill","coordsize","antialias","Number","$this","fillcolor","filled","stroked","opera","calculate","corners","userOffset","margin","bottom","right","newCorner","horizontal","vertical","shiftflip","cornerTop","cornerLeft","user","shiftonly","direction","popposite","opposite","xy","MODAL","OVERLAY","MODALCLASS","MODALSELECTOR","Modal","prevState","focusableElems","focusInputs","blurElems","stealFocus","modal","stealfocus","expr","focusable","mapName","isTabIndexNotNaN","parentNode","visibleModals","detach","overlay","modal_zindex","oEvent","elemWidth","elemHeight","newMy","containerOffset","containerStatic","viewportWidth","viewportHeight","viewportScroll","viewportOffset","methodX","methodY","otherSide","adjustment","side1","side2","lengthName","targetLength","elemLength","initialPos","mySide","atSide","isShift","myLength","atLength","sideOffset","overflow1","overflow2","polys","polygon","baseCoords","newWidth","newHeight","compareX","compareY","realX","realY","rect","ax","ay","bx","by","_angles","ellipse","cx","cy","rx","ry","rxc","cos","PI","rys","sin","circle","frameOffset","mtx","transformed","points","strokeWidth2","getBBox","baseVal","x1","y1","x2","y2","numberOfItems","createSVGPoint","getScreenCTM","matrixTransform","defaultView","parentWindow","frameElement","area","imageOffset","shape","coordsArray","Ie6","_scroll","bgiframe","adjustBGIFrame","redrawContainer","redraw","tipAdjust","dimensions","plugin","drawing","perc","ie6","InputLabel","_isLabelView","_isRadioOrCheckbox","_standardLabel","runCallback","runIf","InputWrapper","inputWrapperClassName","optionsClassName","getLabel","getInput","getInputContainer","getInputs","sectionTitleTemplate","pointerEventsSupported","pointerEvents","pointerEventsPolyfill","underneathElem","elementFromPoint","clientX","clientY","submit","__save","convertSavingState","rawSavingStateEvent","defaultEvent","savingStateEvent","BaseForm","slot","__buttons","__errorFields","__saveModelState","step","totalStep","__toolbar","__createToolbar","__addLayoutItem","__applyMode","showBanner","__showErrors","__cancel","__previous","hasSavingState","getAttribute","customSavingState","__setSavingState","__clearSavingState","saveBtnClassName","toolbar","saveId","saveClassName","noButtonBar","danger","layout","totalSteps","autoSave","scrollOnError","showErrors","resizeSelector","hasButtonBar","__readModeBar","readModeBar","__toggleToolbar","_editMode","edit","__originalModel","clearErrors","validateArray","parseErrorMessage","_handleErrorScroll","$scrollContext","scrollParent","validationErrors","getErrorSummary","addInput","__addNonInputLayoutItem","itemOptions","addSectionTitle","addDivider","_options","inputsOptions","__createInput","validateOnlyIfDirty","errorField","inputWrapper","__createWrapper","__createLabel","_createContainer","contentHeight","SelectParser","options_index","parsed","add_node","add_group","add_option","group_position","_i","_ref","_results","array_index","group_disabled","selected","group_array_index","cssText","select_to_array","parser","AbstractChosen","form_field","browser_is_supported","is_multiple","multiple","set_default_text","set_default_values","setup","set_up_html","register_observers","finish_setup","_this","click_test_action","test_active_click","activate_action","activate_field","active_field","mouse_on_container","results_showing","result_highlighted","result_single_selected","allow_single_deselect","disable_search_threshold","disable_search","enable_split_word_search","search_contains","single_backstroke_delete","max_selected_options","Infinity","inherit_select_classes","default_text","placeholder_text_multiple","placeholder_text","default_multiple_text","placeholder_text_single","default_single_text","results_none_found","no_results_text","default_no_result_text","mouse_enter","mouse_leave","input_focus","container_mousedown","input_blur","blur_test","result_add_option","dom_id","container_id","results_update_field","results_reset_cleanup","result_clear_highlight","results_build","results_toggle","results_hide","results_show","results_search","winnow_results","choices_count","selected_option_count","choices_click","is_disabled","keyup_checker","stroke","search_field_scale","backstroke_length","keydown_backstroke","pending_backstroke","result_select","generate_field_id","new_id","generate_random_id","generate_random_char","rand","chars","container_width","$$1","Chosen","__hasProp","chosen","input_field","_super","ctor","__extends","form_field_jq","current_selectedIndex","selectedIndex","is_rtl","container_classes","container_props","dropdown","search_field","search_results","search_no_results","search_choices","search_container","selected_item","set_tab_index","set_label_behavior","container_mouseup","mouseenter","mouseleave","search_results_mouseup","mouseover","search_results_mouseover","mouseout","search_results_mouseout","search_results_mousewheel","keydown","keydown_checker","search_field_disabled","close_field","results_reset","delta","_ref1","_ref2","wheelDelta","originialEvent","clear_backstroke","show_search_field_default","parsing","results_data","result_add_group","choice_build","single_deselect_control_build","result_do_highlight","high_bottom","high_top","maxHeight","visible_bottom","visible_top","result_highlight","ti","form_field_label","choice","close_link","choice_destroy_link_click","choice_destroy","result_deselect","high","high_id","metaKey","ctrlKey","result_activate","result_deactivate","result_data","deselected","found","regexAnchor","result_id","results","searchText","startpos","zregex","_j","_len1","no_results_clear","no_results","winnow_results_set_highlight","do_high","selected_results","terms","no_results_html","keydown_arrow","next_sib","nextAll","keyup_arrow","prev_sibs","prevAll","next_available_destroy","siblings","div","style_block","styles","f_width","getOption","callout","CalloutCallout","dismissible","bullets","klass","getTopClass","Callout","getNameString","defaultPlaceholder","inlineValidation","addInlineValidation","addModelListeners","addAriaLabel","toModelValue","__getDependencyCalloutBtn","btnConfig","btnOptions","originalClick","__showInputDependencies","getCalloutParent","getModelValue","__getCalloutMsgContainer","calloutMsg","showCallout","calloutConfig","dependencyResolved","btn","dependencyCallout","removeCallout","__evaluateCalloutObject","calloutTitle","defaultCallout","__handleDependency","resolved","fieldDependency","fail","_isEdited","hasIMESupport","enableIMESupport","isComposing","isEditMode","__markError","getReadModeString","toStringValue","changeType","getParams","getParam","getParamOrAttribute","BaseInput","CHOSEN_WINDOW_MARGIN","CHOSEN_MAX_HEIGHT","autoWidth","recalculateChosen","$chosen","$results","$clone","$win","rHeight","rBottom","wHeight","Select","$select","appendOptions","__applyChosen","getOptions","applySortByKey","sortByKey","findSelectWidth","searchThreshold","isComboBox","accessibilityUpdate","textPlaceholder","$searchInput","$highlightedOption","elementId","noResult","handleKeyUpEvent","baseStyles","float","resizeHandler","fixChosenModal","searchPlaceholder","selectedOption","displayString","createAriaLiveNode","ariaDivId","insertAfter","txtBoxId","ulTagId","aria","true","false","BooleanSelect","getArticle","isVowel","errorClass","updateArrayEvent","DeletableBox","getPlaceholderText","errorExplain","getErrorExplainText","debounceDelay","slideUp","updatedValue","parseFunc","clearInvalid","markInvalid","num","TextBoxSet","addNewElement","uniqueIdPrefix","_setArrayObject","arrayObject","_addDeletableBox","deletableBox","slideDown","convertStringToNumber","getChoices","getObjectName","schemaProp","objectName","augmentSchemaProp","possibleValues","profile","prefix","__nestedProperty__","defaultValues","userValues","fixedValues","augmentSchemaProps","schemaProps","cleanSchema","isValidSchemaProp","SchemaFormFactory","createInputOptions","preparedSchemaProp","custom","configs","customOptions","standard","defaultOptions","hasValidSchemaProps","prepareSchema","customInput","wrapAll","hover","CheckBox","isInputSupported","isTextareaSupported","valHooks","clearPlaceholder","$input","activeElement","setPlaceholder","$replacement","newAttrs","rinlinejQuery","specified","textarea","$element","$inputs","TextBox","inputValue","innerTooltip","hasTitleAndText","createQtipContent","toggleTemplate","PasswordBox","__showPasswordToggle","showPasswordToggle","__showPassword","passwordToggleTimer","__hidePassword","RadioRadioOption","Radio","templates","optionId","realName","InputGroupLabelInput","InputGroupInputGroupView","createButtonInput","InputGroup","inputGroupView","strings","LabelInput","InputGroupView","includeHidden","excludeStaticParent","overflowRegex","compiledTmpl","TextBoxForSigninWidget","PasswordBoxForSigninWidget","Form","createCallout","registerInput","internal","util","views","components","forms","API_RATE_LIMIT","WIDGET_LOGIN_CONTAINER_ID","WIDGET_CONTAINER_ID","WIDGET_CONFIG_COLORS_ID","DIRECTION_BACK","RECOVERY_TYPE_PASSWORD","RECOVERY_TYPE_UNLOCK","RECOVERY_FACTOR_TYPE_SMS","RECOVERY_FACTOR_TYPE_EMAIL","RECOVERY_FACTOR_TYPE_CALL","IOS","ANDROID","ODA","MDM","SUCCESS","FORGOT_PASSWORD_EMAIL_SENT","UNLOCK_ACCOUNT_EMAIL_SENT","CONFIG_ERROR","UNSUPPORTED_BROWSER_ERROR","OAUTH_ERROR","AUTH_STOP_POLL_INITIATION_ERROR","U2F_ERROR","WEB_AUTHN_ERROR","WEBAUTHN_ABORT_ERROR","CONFIGURED_FLOW_ERROR","ALL_OPTIONAL_NONE_ENROLLED","ALL_OPTIONAL_SOME_ENROLLED","HAS_REQUIRED_NONE_ENROLLED","HAS_REQUIRED_SOME_REQUIRED_ENROLLED","HAS_REQUIRED_ALL_REQUIRED_ENROLLED","PRIMARY_AUTH","FORGOT_PASSWORD","UNLOCK_ACCOUNT","SESSION_SSO","SESSION_STEP_UP","ACTIVATION_EMAIL_SENT","REGISTRATION_COMPLETE","REGISTRATION_FAILED","IDP_DISCOVERY","OKTA_VERIFY_APPLE_APP_STORE_URL","OKTA_VERIFY_GOOGLE_PLAY_STORE_URL","LOOPBACK_CHALLENGE","CUSTOM_URI_CHALLENGE","UNIVERSAL_LINK_CHALLENGE","APP_LINK_CHALLENGE","CHROME_DTC","expandLanguage","expanded","transformErrorXHR","errorMsg","errorCode","toLower","expandLanguages","callAfterTimeout","debugMessage","logConsoleError","triggerAfterError","statusCode","isAppLink","redirectWithFormGet","isAndroidOVEnrollment","ovEnrollment","redirectWithForm","mainContainer","getElementById","Enums","splitOnFragment","splitOnQuery","targetUrl","queryPart","parameterParts","buildInputForParameter","appendChild","buildSubmitInput","buildDynamicForm","querySelector","createInputExplain","explainKey","labelKey","explainParams","labelParams","isV1StateToken","token","startsWith","getAutocompleteValue","KNOWN_ERRORS","doTransaction","rethrow","appState","trans","manageTransaction","setTransaction","startTransaction","getAuthClient","addListeners","disableSubmitButton","toggleButtonState","setTransactionHandler","transaction","transactionErrorHandler","totpModel","fetchInitialData","trapAuthResponse","postRenderAnimation","page","INPUT","BUTTON","DIVIDER","TOOLBAR","VIEW","Button","Divider","FormControllerSimpleForm","FormType","BaseLoginController","BaseLoginModel","Footer","addFooter","footer","back","FormController","userFullName","formChildren","MOMENT_UNIT","MILLISECOND","SECOND","MINUTE","HOUR","DAY","MOMENT_UNIT_KEYS","convertMomentUnits","momentUnit","entry","factorData","OKTA_VERIFY","iconClassName","sortOrder","OKTA_VERIFY_PUSH","U2F","brandName","WEBAUTHN","WINDOWS_HELLO","YUBIKEY","GOOGLE_AUTH","CUSTOM_HOTP","SMS","CALL","QUESTION","DUO","SYMANTEC_VIP","RSA_SECURID","ON_PREM","PASSWORD","CUSTOM_CLAIMS","GENERIC_SAML","GENERIC_OIDC","getPasswordAgeRequirementDescription","policy","i18nKeys","age","minAgeMinutes","displayableTime","propertiesString","unit","days","hours","minutes","getPasswordAgeRequirement","defaultTimeObj","seconds","milliseconds","normalizedUnit","timeObj","ms","toMilliseconds","parseMs","highestUnit","TimeUtil","getPasswordRequirements","isUpdatedPasswordRequirementsText","passwordRequirements","complexity","complexityFields","policyComplexity","excludeAttributes","excludeFirstName","excludeLastName","setExcludeAttributes","requirements","complexityValue","complexityType","getPasswordComplexityRequirementsAsArray","historyRequirement","historyCount","many","getPasswordHistoryRequirementDescription","ageRequirement","getFactorName","provider","factorType","getFactorNameForFactorType","isOktaVerify","getFactorLabel","getFactorDescription","descriptionKey","getFactorIconClassName","getFactorSortOrder","getRememberDeviceValue","getSecurityQuestionLabel","questionObj","localizedQuestion","question","questionText","removeRequirementsFromError","passwordRequirementsAsString","getPasswordComplexityDescription","getPasswordComplexityDescriptionForHtmlList","minLowerCase","minUpperCase","minNumber","minSymbol","excludeUsername","requirement","getCardinalityText","enrolled","cardinality","findFactorInFactorsArray","factors","factor","inputmode","factorName","FactorUtil","factorId","passCode","__factorType__","__provider__","activate","EnterPasscodeForm","SCOPE_N_GROUP_CONFIG","groups","myAccount","users","apps","authenticators","authorizationServers","clients","domains","idps","linkedObjects","policies","eventHooks","inlineHooks","logs","orgs","roles","schemas","sessions","trustedOrigins","findScopeGroupKey","groupType","ScopeGroupHeaderView","expandScopes","scopes","ScopeItem","allScopes","scopesWithGroup","SCOPE_GROUP_NAMES_CONFIG","groupName","groupKey","consentLogoHeaderTemplate","ConsentModel","consent","consentCancelFn","ConsentHeader","customLogo","defaultLogo","clientURI","issuer","ConsentForm","ScopeList","AdminConsentRequiredController","CustomError","super","setPrototypeOf","ConfigError","UnsupportedBrowserError","OAuthError","RegistrationError","AuthStopPollInitiationError","U2FError","WebAuthnError","WebauthnAbortError","ConfiguredFlowError","flowSetting","InlineErrorType","TerminalErrorType","terminal","TypedOAuthError","originalError","errorTypeCtor","errorType","orginalError","errorDetails","errorTrait","getOwnPropertyDescriptor","RecoverableError","NonRecoverableError","ClockDriftError","UserNotAssignedError","JITProfileProvisioningError","MfaRequiredError","getTypedOAuthError","mfaRequiredMsg","clockDriftMsg","AUTH_PARAMS","getTokens","callGlobalSuccess","typedError","callGlobalError","authClient","isAuthorizationCodeFlow","isPKCE","getTokenOptions","authParams","popupTitle","timeout","oAuthTimeout","getWithRedirect","sessionToken","getWithoutPrompt","getWithPopup","verifyUrlTpl","verifyUrlMultipleTpl","verifyUrlNoProviderTpl","enrollFactorUrlTpl","activateFactorUrlTpl","recoveryUrlTpl","refreshUrlTpl","signinWithUsernameUrlTpl","sessionCookieRedirectTpl","deviceActivationStatuses","isHostBackgroundChromeTab","isDocumentVisible","visibilityState","createVerifyUrl","factorIndex","createEnrollFactorUrl","createActivateFactorUrl","createRecoveryUrl","recoveryToken","createRefreshUrl","stateToken","createSigninUrl","username","routeAfterAuthStatusChangeError","routeAfterAuthStatusChange","setAuthResponse","handleResponseStatus","clearLastAuthResponse","recoveryType","_embedded","deviceActivationStatus","OAuth2Util","successData","relayState","redirectFn","nextUrl","_links","stepUp","finish","session","setCookieAndRedirect","redirectUri","redirectUrl","checkVisibilityAndCallSuccess","handleSuccessResponseStatus","lastFailedChallengeFactorData","lastUsedFactor","getDefaultFactor","clearLastFailedChallengeFactorData","pollUrl","setLastFailedChallengeFactorData","activateUrl","fromEmail","isForgotPassword","isUnlock","resError","defaultFactor","factorURL","RouterUtil","enroll","poll","factorResult","instructions","qrcode","altQRCode","BarcodeView","pollForEnrollment","isCustomized","baseClass","classNames","desc","parentElement","granularConsentHeaderTemplate","getConsentHeader","consentRequiredDescription","granularConsentDescription","isGranularConsent","skipLink","SkipLink","expiresAt","scopeNames","optedScopes","sortedScopes","scope1","scope2","ScopeCheckBox","modelType","getScopeCheckBoxes","termsOfService","privacyPolicy","exists","sessionExists","closeSession","skip","passwordWarn","expiringSoon","numDays","InvalidUserCodeErrorView","userCode","deviceActivate","addHyphen","currentVal","DEVICE_ACTIVATED","DEVICE_NOT_ACTIVATED_CONSENT_DENIED","DEVICE_NOT_ACTIVATED","DEVICE_CODE_ERROR_KEYS","iconClass","isDeviceCodeError","vendorName","FactorFactor","extraProperties","enrollment","profiles","answer","backupFactor","showAnswer","rememberDevice","autoPush","isOktaFactor","factorUtil","factorLabel","factorDescription","securityQuestion","phoneNumber","deviceName","enrolledFactors","adoption","additionalEnrollment","canUseResend","isAnswerRequired","isFactorTypeVerification","setCustomHotpVendorName","needsPasscode","resend","firstLink","pushFactorHasAutoPush","_findFactor","verify","transactionCallBack","initiatePollTimout","factorTypes","enrolledProfiles","FactorFactors","oktaPushFactor","totpFactor","isTotpFirst","parsedFactors","isOkta","isOktaTotp","isOktaPush","notEnrolled","hideOktaTotp","hideOktaPush","getFirstUnenrolledRequiredFactor","_getFactorsOfType","getFactorIndex","hasMultipleFactorsOfSameType","getFactorByTypeAndIndex","EnrollCustomFactorController","Factor","HtmlErrorMessageView","showResendCallout","hideResendCallout","resendEmail","finally","formData","factorEmailVal","factorEmail","ResendEmailView","US","AG","AI","AS","BB","BM","BS","CA","DM","DO","GD","GU","JM","KN","KY","LC","MP","MS","PR","SX","TC","TT","VC","VG","VI","RU","KZ","EG","ZA","GR","NL","BE","FR","ES","HU","IT","VA","RO","CH","AT","GB","GG","IM","JE","DK","SE","NO","SJ","PL","DE","PE","MX","CU","AR","BR","CL","CO","VE","MY","AU","CC","CX","ID","PH","NZ","SG","TH","JP","KR","VN","CN","TR","IN","PK","AF","LK","MM","IR","SS","MA","EH","DZ","TN","LY","GM","SN","MR","ML","GN","CI","BF","NE","TG","BJ","MU","LR","SL","GH","NG","TD","CF","CM","CV","ST","GQ","GA","CG","CD","AO","GW","IO","AC","SC","SD","RW","ET","SO","DJ","KE","TZ","UG","BI","MZ","ZM","MG","RE","YT","ZW","MW","LS","BW","SZ","KM","SH","TA","ER","AW","FO","GL","GI","PT","LU","IE","IS","AL","MT","CY","FI","AX","BG","LT","LV","EE","MD","AM","BY","AD","MC","SM","UA","RS","ME","XK","HR","SI","BA","MK","CZ","SK","LI","FK","BZ","GT","SV","HN","NI","CR","PA","PM","HT","GP","BL","MF","BO","GY","EC","GF","PY","MQ","SR","UY","CW","BQ","TL","NF","BN","NR","PG","TO","SB","VU","FJ","PW","WF","CK","NU","WS","KI","NC","TV","PF","TK","FM","MH","KP","HK","MO","KH","LA","BD","TW","MV","LB","JO","SY","IQ","KW","SA","YE","OM","PS","AE","IL","BH","QA","BT","MN","NP","TJ","TM","AZ","GE","KG","UZ","GS","PN","AQ","UM","AN","countries","sorted","countryCode","countryCallingCodes","countryCallingCode","autocomplete","EnrollCallAndSmsControllerwarningTemplate","factorIdIsDefined","isCallFactor","getClassName","sendCode","phoneExtension","lastEnrolledPhoneNumber","hasExistingPhones","trapEnrollment","ableToResend","skipPhoneValidation","CountryUtil","fullPhoneNumber","lastEnrolled","limitResending","isMfaEnroll","profileData","updatePhone","doEnroll","resendCode","isCall","formSubmit","formRetry","formSubmitted","numberFieldClassName","buttonClassName","PhoneTextBox","showWarning","clearWarnings","warning","callTimeWarning","smsTimeWarning","cardinalityTextTpl","FactorListFactorRow","showInlineSetupButton","getSetupButtonText","cardinalityText","minimize","maximize","FactorList","listTitle","currentModel","currentRow","subtitleTpl","pageType","getSubtitle","remainingDays","getGracePeriodSubtitle","getDefaultSubtitle","RequiredFactorList","notEnrolledListTitle","hasRequired","numRequiredEnrolled","numRequiredNotEnrolled","numOptionalEnrolled","numOptionalNotEnrolled","postAction","postArgument","host","duoSig","appSig","DUO_MESSAGE_FORMAT","DUO_ERROR_FORMAT","DUO_OPEN_WINDOW_FORMAT","VALID_OPEN_WINDOW_DOMAINS","initializeStatefulVariables","throwError","givenUrl","getDataAttribute","dataset","fallbackEvent","onReady","offReady","parseSigRequest","sig","sigParts","sigRequest","isDuoMessage","getPromptElement","iframeContainer","getUserDefinedElement","isIframe","validateIframeContainer","generateIframeSrc","onReceivedMessage","protocol","isValidUrlToOpen","doPostBack","promptElement","iframeAttributes","setAttribute","response","sig_request","post_action","post_argument","submit_callback","asyncReady","_onReady","_parseSigRequest","_isDuoMessage","_doPostBack","signature","getInitOptions","signedResponse","sig_response","post","Duo","activation","complete","factorOpt","hotpFactor","isRSA","credentialId","field1","field2","validateFieldsMatch","confirmPassword","ValidationUtil","securityQuestions","questions","questionsRes","nextPassCode","OKTA","APPLE","GOOGLE","STORE","showWhenDeviceTypeSelected","__deviceType__","EnrollTotpControllerAppDownloadInstructionsView","appStoreLink","appIcon","appStoreName","StoreLinks","appStoreLinkText","EnrollTotpControllerEnrollTotpController","isOneFactor","getU2fEnrollErrorMessageKeyByCode","getU2fVerifyErrorMessageKeyByCode","__enrolled__","appId","registerRequests","FidoUtil","getU2fVersion","challenge","nonce","u2f","getU2fEnrollErrorMessageByCode","registrationData","clientData","isU2fAvailable","request","errorMessageKey","_startEnrollment","_stopEnrollment","constructPostData","profileAttributes","postData","registration","createNewAccount","getEnrollFormData","expand","setFieldPlaceholder","formFields","formField","profileSchemaAttributes","userProfileSchema","profileAttributeObject","passwordContainsFormField","formFieldArr","usernameArr","userNameParts","delimiters","userNamePart","getParts","formFieldPart","checkSubSchemas","showError","subSchema","ele","fieldValue","checkSubSchema","focusout","ProfileSchema","RegistrationFormFactory","requiredFieldsLabel","EnrollUser","EnrollUserForm","FooterWithBackLink","adaptToOkta","getStringHash","charCodeAt","base64UrlSafeToBase64","binToStr","bin","btoa","byte","fromCharCode","strToBin","atob","accountInfo","cryptoParams","algorithm","msCredentials","makeCredential","cred","freeze","credential","publicKey","attestation","allowList","filters","accept","getAssertion","authenticatorData","authnrData","inputFunction","responseValue","credentials","getExcludeCredentials","excludeCredentials","CryptoUtil","webauthnAbortController","webauthn","AbortController","signal","newCredential","attestationObject","clientDataJSON","transports","getTransports","clientExtensions","getClientExtensionResults","onlySupportsSecurityKey","__isEnrolled__","_enroll","rpDisplayName","userDisplayName","accountName","userId","creds","Spinner","_resetErrorMessage","messageView","_errorMessageView","EnrollmentLinkSentControllerFooter","emailSentForm","smsSentForm","activationType","EnterPasscodePushFlowControllerFooter","ForgotPasswordControllernoFactorsError","ForgotPasswordControllerFooter","hideBackToSignInForReset","helpSupportNumber","validateUsername","forgotPassword","transformUsername","smsEnabled","callEnabled","emailEnabled","autoComplete","mobileFactors","createRecoveryFactorButton","setDefaultFactorType","ContactSupport","labelCode","LAST_USERNAME_COOKIE_NAME","cookieUsername","CookieUtil","getUsernameAndRemember","lastUsername","remember","multiOptionalFactorEnroll","settingsUsername","rememberMeEnabled","setUsernameCookie","signInArgs","getSignInArgs","primaryAuthPromise","doPrimaryAuth","authenticate","signInWithCredentials","identifier","warnBeforePasswordExpired","deviceFingerprintEnabled","typingPatternEnabled","http","getUserAgent","isMessageFromCorrectSource","$iframe","generateDeviceFingerprint","oktaDomainUrl","isWindowsPhone","iFrameTimeout","removeIframe","onMessageReceivedFromOkta","handleError","postMessage","sendMessageToOkta","fingerprint","SharedUtil","dividerTpl","formTitleTpl","socialIdpButtons","pivButton","customButtons","divider","_createPivButton","_createSocialIdpButton","_createCustomButton","dataAttr","i18nKey","idp","currentController","lastAuthResponse","fromURI","targetUri","TypingDNA","initialized","addTarget","removeTarget","getTypingPattern","startDiagram","stopDiagram","getDiagram","getExtendedDiagram","getMouseDiagram","startMouse","stopMouse","getQuality","getLength","isMobile","getTextId","maxHistoryLength","defaultHistoryLength","maxSeekTime","maxPressTime","spKeyCodes","spKeyCodesObj","keyCodes","keyCodesObj","pt1","ut1","wfk","sti","skt","recording","mouseRecording","mouseMoveRecording","spKeyRecording","diagramRecording","dwfk","dsti","dskt","drkc","prevKeyCode","maxMoveDeltaTime","maxScrollDeltaTime","maxStopTime","maxClickTime","maxMouseHistoryLength","lastMouseMoveTime","lastMouseDownTime","stopTimes","clickTimes","lastMouseStop","zl","isAndroidChrome","ACLastTime","ACSeekTime","ACPressTime","ACLastCharCode","ACLastKeyCode","ACInputLengths","lastLength","ACPreviousKeyCode","targetIds","lastTarget","lastTargetFound","replaceMissingKeys","replaceMissingKeysPerc","keyDown","isTarget","keyUp","keyPress","ACKeyDown","ACKeyUp","t0","seekTotal","startTime","shiftKey","dlastDownKey","charCode","ut","pressTime","arrD","addDiagram","mouseScroll","scrollStarted","currentTime","scrollTimes","scrollTopArr","scrollInterval","checkScroll","mouseMove","xPositions","screenX","yPositions","screenY","moveInterval","checkMove","mouseDown","stopTime","mouseUp","clickTime","targetIndex","selectionStart","targetFound","stack","getDistance","getTotalDistance","totalDistance","getAngle","xPosDelta","yPosDelta","downUp","atan","recordMoveAction","deltaTime","directDistance","ratioDistance","recordScrollAction","mouseDiagram","clearLastMove","clearLastScroll","stackDiagram","targetId","extended","textId","caseSensitive","historyTotalLength","histRev","histSktF","math","fo","histPrtF","pressHistMean","avg","seekHistMean","pressHistSD","sd","seekHistSD","charMeanTime","pressRatio","rd","seekToPressRatio","pressSDToPressRatio","seekSDToPressRatio","cpm","rev","seekMean","pressMean","postMean","seekSD","pressSD","postSD","apu","getSpecialKeys","dec","toFixed","sum","sumVS","mean","asd","aMean","fVal","tempval","fnv1aHash","hval","returnArr","diagramType","sliceStackByTargetId","missingCount","diagramHistoryLength","strLength","returnTextId","strUpperCharCode","currentSensitiveCharCode","strLower","strUpper","lastFoundPos","lastPos","currentCharCode","startPos","finishPos","seekTime","savedMissingAvgValues","historyLength","startCount","newStack","seekArr","pressArr","historyStackObj","arrLen","clicksArrLen","stopArrLen","typingPattern","acc","rec","avgAcc","revs","tReturn","checkMobileValidity","totalEvents","mobile","check","vendor","tdna","novalidate","trackTypingPattern","async","TypingUtil","processCreds","DeviceFingerprint","stateEnableChange","stateUsernameChange","getUsernameField","getPasswordField","getRemeberMeCheckbox","that","clearAriaInvalid","change","passwordFieldObject","selectorId","helpLinkUrl","toggleLinks","slideToggle","customResetPasswordPage","customUnlockPage","handleClickEvent","clickHandler","PrimaryAuthForm","PrimaryAuthModel","CustomButtons","addFooterWithBackLink","setUsername","FooterRegistration","setUsernameFromIdpDiscovery","shouldComputeDeviceFingerprint","buttonState","resource","requestContext","webfingerArgs","webfinger","usernameProps","PrimaryAuthController","IDPDiscoveryForm","IDPDiscoveryModel","primaryAuthModel","errObj","goToFactorActivation","goToFactor","setStateValues","userPhoneNumber","userCountryCode","factorActivationType","enrollFactor","textActivationLinkUrl","emailActivationLinkUrl","sharedSecret","send","activationSendLinks","smsItem","emailItem","MANUAL","sharedSecretKey","setInitialModel","tx","resume","ManualSetupFooter","addInlineTotp","PassCodeFormwarningTemplate","getFormAndButtonDetails","buttonDataSe","formAndButtonDetails","warningDetails","correctAnswer","titleTpl","PushFormwarningTemplate","handleRejectStateChange","numberChallengeView","NumberChallengeView","isWaitingForNumberChallenge","isMfaTimeout","setSubmitState","isMfaRequired","ableToSubmit","a11ySpan","doSave","factorsPolicyInfo","warningTimeout","isMfaRejected","setRejectedErrorMessage","factorResultMessage","createEmailMaskElement","emailTpl","SendEmailAndVerifyCodeFormVerifyEmailCodeForm","handleSubmit","renderChallengView","maskPasswordField","handleSignout","isSMSPasswordRecovery","clearTransactionData","linkClassName","linkText","FooterSignout","signoutTemplateData","factorPageCustomLinkHref","factorPageCustomLinkText","showLink","hasFactorPageCustomLink","SecurityQuestionForm","EmailMagicLinkForm","SendEmailAndVerifyCodeForm","PassCodeForm","TOTPForm","YubikeyForm","PushForm","PasswordForm","findModel","inlineTotpForm","InlineTOTPForm","autoPushCheckBox","rememberDeviceCheckbox","FooterMFA","allRequirements","oldPassword","newPassword","validatePasswordMatch","changePassword","PasswordRequirements","revokeSessions","payload","resetPassword","_stopCountDown","cancelRequest","_checkStatus","transactionObject","factorPollingIntervalSeconds","refresh","_startCountDown","countDown","checkStatusTimeout","unlockAccount","sendEmailLink","verifyRecoveryToken","introspect","loginWithActivationToken","activationToken","RegistrationSchemaRegistrationSchemaPropertyCollection","modelProperties","modelProperty","parseResponseData","requireFields","requireField","fieldOrderIds","fieldOrder","fieldOrderId","defaultPolicyId","policyId","parseRegistrationSchema","profileSchema","SubSchemaSubSchema","class","RegistrationControllerFooter","RegistrationSchema","getRegistrationApiUrl","orgPolicyId","getRegistrationPolicyApi","doPostSubmit","LoginModel","registerUser","postSubmitData","postRegistrationSubmit","renderIsNotUniqueError","renderLegacyLocationErrorIfNeeded","createRegistrationModel","RegistrationControllerModel","userProfile","preRegistrationSubmit","hideRegisterButton","errMsg","updatedSchema","modifyErrors","errorResp","formFieldName","SubSchema","UnlockAccountControllernoFactorsError","UnlockAccountControllerFooter","saveText","verification","pivConfig","isCustomDomain","customDomain","getCert","certAuthUrl","postCert","xhrFields","withCredentials","registeredKeys","keyHandle","getRegisteredKeysSequence","sign","signatureData","getU2fVerifyErrorMessageByCode","getAllowCredentials","allowCredentials","assertion","__autoTriggered__","verifyData","signIn","_successEnrollment","FooterWithBackLinkOnError","UNDEFINED_USER","NEW_USER","securityImageUrlTpl","deviceFingerprint","securityImage","securityImageDescription","pwdImg","imageDescription","getSecurityImage","transactionError","flashError","beaconType","disableUsername","trapMfaRequiredResponse","addedFactorTypes","combinedFactors","factorTypeObj","combineFactorsObjects","factorsObject","getUser","isSuccessResponse","isProfileRequired","isMfaChallenge","isUnauthenticated","isMfaEnrollActivate","isWaitingForActivation","hasMultipleFactorsAvailable","promptForFactorInUnauthenticated","isIdxStateToken","isPwdExpiringSoon","passwordExpireDays","expiration","isPwdManagedByOkta","passwordExpiredWebsiteName","passwordExpiredLinkUrl","activatedFactorId","activatedFactorType","activatedFactorProvider","sendLinks","duoEnrollActivation","prevLink","gracePeriodRemainingDays","gracePeriod","endDate","gracePeriodEndDate","getGracePeriodRemainingDays","recoveryQuestion","recovery_question","userConsentName","firstName","lastName","userEmail","defaultAppLogo","targetLabel","targetLogo","logo","targetTermsOfService","targetPrivacyPolicy","targetClientURI","authentication","phones","hasExistingPhonesForCall","isUndefinedUser","isNewUser","allowRememberDevice","rememberDeviceLabel","rememberDeviceLifetimeInMinutes","timeString","factorLifetimeInMinutes","rememberDeviceByDefault","verifyCustomFactorRedirectUrl","enrollCustomFactorRedirectUrl","isFactorResultFailed","factorResultErrorMessage","usingDeviceFlow","assetBaseUrlTpl","signOutLink","backToSignInLink","flow","globalSuccessFn","globalErrorFn","logoText","proxyIdxResponse","overrideExistingStateToken","defaultCountryCode","clientId","codeChallenge","codeChallengeMethod","authScheme","idpDisplay","piv","otp","useClassicEngine","backToSignInUri","customizedValue","showPasswordToggleOnSignInPage","redirectUtilFn","redirectByFormSubmit","hostedLanguages","userLanguages","preferred","supportedLowerCase","supportedPos","oauth2Enabled","oauthRedirectUri","configuredSocialIdps","idpConfig","IDP","hasPivCard","socialAuthPositionTop","hasConfiguredButtons","Settings","setAcceptLanguageHeader","attributeName","colors","getIssuerOrigin","setFlow","brand","setAuthClient","operation","transformFn","onSuccess","onFailure","parseSchema","preSubmit","postSubmit","labels","abu","tabindex","zoom","easing","fx","always","rotate","swapPages","$parent","$oldRoot","$newRoot","directionClassName","newRootAnimations","clearStyles","SWAP_PAGE_TIME","swapBeacons","swap","implode","explode","radialProgressBar","circles","clip","leftHalf","transform","Beacon","NO_BEACON_CLS","LOADING_BEACON_CLS","isLoadingBeacon","beacon","LoadingBeacon","removeBeacon","currentBeacon","addBeacon","NextBeacon","Header","setLoadingBeacon","removeLoadingBeacon","setBeacon","transition","typeOfTransition","Animations","isLoading","getContentEl","setBackgroundImage","imgSrc","imgDescription","isSecurityImage","updateSecurityImage","hasBorder","hasAntiPhishing","destroyAntiPhishingMessage","fadeIn","antiPhishingMessage","removeAntiPhishingMessage","hex","lum","newHex","cspNonce","lighten","createTextNode","assetBaseUrl","assetRewrite","AppState","wrapper","AuthContainer","stateLessRouteHandlers","routeName","isStateLessRouteHandler","controllerOptions","LanguageUtil","ColorsUtil","addStyle","oldController","SecurityBeacon","beaconIsAvailable","pushTitleTpl","factorsList","dropdownOptions","TITLE","DUO_PUSH","DUO_SMS","DUO_CALL","$target","FactorsDropDownOptions","multiplePushFactors","FactorsDropDown","BaseLoginRouter","signin","defaultAuth","idpDiscovery","primaryAuth","idpDiscoveryCheck","ForceIDPDiscoveryController","IDPDiscoveryController","verifyDuo","VerifyDuoController","FactorBeacon","verifyPIV","VerifyPIVController","PIVBeacon","PollController","verifyWebauthn","VerifyWebauthnController","VerifyWindowsHelloController","verifyU2F","VerifyU2FController","verifySAMLFactor","VerifyCustomFactorController","verifyOIDCFactor","verifyClaimsFactor","MfaVerifyController","verifyNoProvider","enrollChoices","EnrollChoicesController","enrollDuo","EnrollDuoController","enrollQuestion","EnrollQuestionController","enrollPassword","EnrollPasswordController","enrollSms","EnrollCallAndSmsController","enrollCall","enrollEmail","EnrollEmailController","enrollActivateEmail","EnrollActivateEmailController","enrollRsa","EnrollOnPremController","enrollOnPrem","enrollSymantecVip","EnrollSymantecVipController","enrollYubikey","EnrollYubikeyController","enrollSAMLFactor","enrollOIDCFactor","enrollClaimsFactor","enrollActivateClaimsFactor","EnrollActivateCustomFactorController","enrollTotpFactor","EnrollTotpController","enrollHotpFactor","EnrollHotpController","enrollWebauthn","EnrollWebauthnController","EnrollWindowsHelloController","enrollU2F","EnrollU2FController","scanBarcodeTotpFactor","BarcodeTotpController","scanBarcodePushFactor","BarcodePushController","activateTotpFactor","ActivateTotpController","manualSetupTotpFactor","ManualSetupTotpController","manualSetupPushFactor","ManualSetupPushController","activationLinkSent","EnrollmentLinkSentController","enterPasscodeInPushEnrollmentFlow","EnterPasscodePushFlowController","passwordExpired","PasswordExpiredController","customPasswordExpired","CustomPasswordExpiredController","ForgotPasswordController","recoveryChallenge","RecoveryChallengeController","recoveryEmailSent","PwdResetEmailSentController","unlockEmailSent","UnlockEmailSentController","RecoveryQuestionController","passwordReset","PasswordResetController","recoveryLoading","RecoveryLoadingController","UnlockAccountController","accountUnlocked","AccountUnlockedController","refreshAuthState","RefreshAuthStateController","RegistrationController","registerComplete","RegistrationCompleteController","errorState","ErrorStateController","consentRequired","ConsentRequiredController","adminConsentRequired","enrollUser","EnrollUserController","DeviceActivateController","deviceActivateComplete","DeviceActivateTerminalController","FORMS","IDENTIFY","SELECT_IDENTIFY","IDENTIFY_RECOVERY","SELECT_ENROLL_PROFILE","ENROLL_PROFILE","ENROLL_PROFILE_UPDATE","REQUEST_ACTIVATION","CONSENT_ADMIN","CONSENT_ENDUSER","CONSENT_GRANULAR","CONSENT_EMAIL_CHALLENGE","SELECT_AUTHENTICATOR_AUTHENTICATE","SELECT_AUTHENTICATOR_UNLOCK","AUTHENTICATOR_VERIFICATION_DATA","CHALLENGE_AUTHENTICATOR","CHALLENGE_POLL","RESEND","SELECT_AUTHENTICATOR_ENROLL","SELECT_AUTHENTICATOR_ENROLL_DATA","AUTHENTICATOR_ENROLLMENT_DATA","ENROLL_AUTHENTICATOR","SELECT_ENROLLMENT_CHANNEL","ENROLLMENT_CHANNEL_DATA","ENROLL_POLL","REENROLL_AUTHENTICATOR","REENROLL_AUTHENTICATOR_WARNING","REENROLL_CUSTOM_PASSWORD_EXPIRY","REENROLL_CUSTOM_PASSWORD_EXPIRY_WARNING","RESET_AUTHENTICATOR","SKIP","POLL","FAILURE_REDIRECT","SUCCESS_REDIRECT","REDIRECT_IDP","PIV_IDP","DEVICE_CHALLENGE_POLL","DEVICE_APPLE_SSO_EXTENSION","CANCEL_TRANSACTION","LAUNCH_AUTHENTICATOR","LAUNCH_WEBAUTHN_AUTHENTICATOR","ENROLL_WEBAUTHN_RESIDENTKEY","DEVICE_ENROLLMENT_TERMINAL","USER_CODE","TERMINAL","FORMS_WITHOUT_SIGNOUT","FORMS_WITH_STATIC_BACK_LINK","FORMS_FOR_VERIFICATION","AUTHENTICATOR_KEY","PHONE","SECURITY_QUESTION","OV","GOOGLE_OTP","RSA","CUSTOM_OTP","CUSTOM_APP","SMARTCARD","AUTHENTICATOR_METHODS","FORM_NAME_TO_OPERATION_MAP","TERMINAL_FORMS","createOVOptions","ovItem","relatesTo","methodTypeObj","methodOptions","signedNonceOption","ovOptions","methodTypeIndex","newMethodTypeObj","mutable","newItem","ovIndex","deviceKnown","createAuthenticatorOptions","valueObject","authenticatorKey","executeHookFunctions","nestedOmit","currentFormName","remediations","dynamicRefreshInterval","authenticatorProfile","currentAuthenticator","currentAuthenticatorEnrollment","authenticatorMethodType","isPasswordRecovery","recoveryAuthenticator","isIdentifierOnlyView","uiSchema","hasRemediationObject","formName","neededToProceed","remediation","hasActionObject","actionName","actions","getRemediationAuthenticationOptions","authenticator","authenticatorOptions","getActionByPath","actionPath","paths","targetObject","getCurrentViewState","currentViewState","allFormNames","getSchemaByName","getAuthenticatorDisplayName","isAuthenticatorChallenge","shouldReRenderView","transformedResponse","hasFormError","previousRawState","rawIdxState","identicalResponse","getRefreshInterval","_isReRenderRequired","shouldShowSignOutLinkInCurrentForm","hideSignOutLinkInMFA","idxActions","containsMessageWithI18nKey","messagesObjs","messagesObj","containsMessageStartingWithI18nKey","keySubStr","clearAppStateCache","chooseRemediation","firstRemediation","contextualData","selectedChannel","setIonResponse","doRerender","hook","getHook","executeHooksBefore","executeHooksAfter","setNonIdxError","reRender","_isChallengeAuthenticatorPoll","isSameExceptMessages","isChallengeAuthenticator","isCurrentAuthenticatorEmail","STATE_HANDLE_SESSION_STORAGE_KEY","LAST_INITIATED_LOGIN_URL_SESSION_STORAGE_KEY","RESEND_TIMESTAMP_SESSION_STORAGE_KEY","sessionStorage","CONFIGURED_FLOW","startLoginFlow","idxOptions","exchangeCodeForTokens","Promise","handleProxyIdxResponse","sessionStorageHelper","meta","getSavedTransactionMeta","interactionHandle","messages","proceed","emailVerifyCallback","getFlow","stateHandleFromSession","idxResp","stateHandle","convert","lastResult","firstLevelObjects","getFirstLevelObjects","remediationValues","hasSkipRemediationOnly","RemediationForms","deviceEnrollment","getRemediationValues","failure","isFailureRedirect","isDirectAuth","alwaysRedirect","failureRedirect","handleFailureRedirect","widgetRemedations","idpsConfig","existsRedirectIdpIds","redirectIdpRemedations","injectIdPConfigButtonToRemediation","isVerifyFlow","modifyFormNameForIdP","redirectIdpRemediations","successRedirect","convertRedirectIdPToSuccessRedirectIffOneIdp","GMT","WET","CET","MET","ECT","EET","MIT","HST","AST","PST","MST","PNT","CST","EST","IET","PRT","CNT","AGT","BET","ART","CAT","EAT","NET","PLT","IST","BST","VST","CTT","JST","ACT","AET","SST","NST","ionOptionsToUiOptions","timezoneUISchema","optionalType","UISchemaHandlers","ionFormField","remediationForm","transformedResp","createUISchema","secret","getPasswordUiSchema","hint","TimeZone","ionField","inputType","populateUISchemaForDisplay","populateUISchemaForRadio","sublabel","getRadioUiSchema","getCheckboxUiSchemaWithDefaultValue","getCheckboxUiSchema","getAuthenticatorsEnrollUiSchema","optionsUiSchemas","opt","getAuthenticatorsVerifyUiSchema","nestedForm","inputGroupName","uiSchemaDefaultConfig","fieldType","uiSchemaResult","uiSchemaHandler","insertUISchema","getButtonDataSeAttr","methodType","getAuthenticatorData","isVerifyAuthenticator","nicknameText","nickname","buttonDataSeAttr","noTranslateClassName","idpName","logoUri","getAuthenticatorDataForVerification","WEBAUTHN_API_GENERIC_ERROR_KEY","SECURITY_QUESTION_PREFIXES","I18N_OVERRIDE_MAPPINGS","I18N_PARAMS_MAPPING","I18N_OVERRIDE_WITH_PARAMS_MAP","Email","doesI18NKeyExist","getI18NValue","i18nPath","securityQuestionValue","getI18nKey","updateLabelForUiSchema","authenticatorKeyPath","getI18NParams","customLabel","i18nPathOption","optionsUiSchema","getMessage","i18nParams","getI8nKeyUsingParams","isWebAuthnAPIError","getMessageFromBrowserError","getMessageKey","uiSchemaLabelTransformer","isCustomizedI18nKey","updateAppState","idxResponse","lastResponse","interactionCode","tokens","transactionMeta","isRemediationMode","clearTransactionMeta","qs","toQueryString","codeVerifier","interactionCodeFlow","ionResponse","curResponse","i18nTransformer","uiSchemaTransformer","responseTransformer","transformIdxResponse","formatIDXError","idxError","details","idxMessage","formatError","error_description","isInvalidRecoveryTokenError","formatInvalidRecoveryTokenError","isOIENotEnabledError","formatOIENotEnabledError","isOIEConfigurationError","formatOIEConfigurationError","convertErrorMessageToErrorSummary","errorKey","getRemediationErrors","remediationFormFields","seen","uniqWith","getGlobalErrors","allErrors","getGlobalErrorKeys","errorI18NKey","hasControllerRendered","updateDeviceFingerprint","restartLoginFlow","handleIdxResponseFailure","formattedError","originalResp","configuredFlow","idxState","proceedIfAvailable","stepIntoSpecificIdxFlow","handleConfiguredFlow","requestDidSucceed","IonHelper","transactionManager","updateIdentifierCookie","hasAuthenticationSucceeded","successWithInteractionCode","HeaderBeacon","mainContentContainer","beaconContainer","nameToClass","textViewOptions","additionalOptions","linkName","linkOptions","Link","ENROLLED_PASSWORD_RECOVERY_LINK","ORG_PASSWORD_RECOVERY_LINK","getForgotPasswordLink","forgotPasswordLink","customForgotPasswordHref","getSkipSetupLink","getSignOutLink","getFactorPageCustomLink","factorPageCustomLink","formsNeedFactorPageCustomLink","helpLinksFactorPageLabel","helpLinksFactorPageHref","footerInfo","hasBackToSignInLink","LinkView","ToggleTextLink","skipAll","MS_PER_SEC","CANCEL_POLLING_ACTION","IDENTIFIER_FLOW","AUTHENTICATION_CANCEL_REASONS","AuthenticatorRow","backgroundImage","authenticatorUsageText","allowedFor","hasOptionalFactors","handleSelect","handleModelInvalid","showAuthenticatorRequiredError","OktaSignInWidgetOnCaptchaLoadedCallback","OktaSignInWidgetOnCaptchaSolvedCallback","HCAPTCHA_URL","RECAPTCHAV2_URL","captchaConfig","siteKey","isCaptchaConfigured","onCaptchaSolvedCallback","_addCaptcha","hcaptcha","grecaptcha","onCaptchaSolved","captchaObject","_getCaptchaOject","captchaId","sitekey","_addHCaptchaFooter","_loadCaptchaLib","_getCaptchaUrl","scriptTag","footerContainer","getElementsByClassName","insertAdjacentHTML","baseURL","inputCreationStrategy","authenticatorEnrollSelect","optionItems","AuthenticatorEnrollOptions","authenticatorVerifySelect","authSet","Set","isDuplicate","AuthenticatorVerifyOptions","AdminScopeList","EnduserScopeList","CaptchaView","uiSchemaObj","createIdpButtons","createPIVButton","idpObject","maxWidth","whiteSpace","isTextOverflowing","addCustomButton","customButtonSettings","getUISchema","FormInputFactory","showMessages","addInputOrView","saveForm","cancelForm","handleClearFormError","formErrorContainer","addIdentifier","identifierHTMLString","optionUiSchemaConfig","optionUiSchemaIndex","showCustomFormErrorCallout","errContainer","errorObj","startPolling","newRefreshInterval","fixedPollingInterval","dynamicPollingInterval","countDownCounterValue","pollingInterval","_startRemediationPolling","_startAuthenticatorPolling","responseKey","authenticatorPollAction","pollInterval","polling","stopPolling","updateRefreshInterval","convertUiSchemaFieldToProp","uiSchemaField","createPropsAndLocals","optionUiSchemaValue","FORMNAME_CLASSNAME_MAPPINGS","sms","voice","RESEND_PUSH","getV1ClassName","isPasswordRecoveryFlow","BaseHeader","Body","BaseFooter","additionalClassNames","v2ClassName","v1ClassName","getClassNameMapping","renderForm","createModelClass","useRedirect","appendLoginHint","deviceChallengeUrl","loginHint","doChallenge","fromView","deviceChallenge","getDeviceChallengePayload","HIDE_CLASS","challengeMethod","doLoopback","doCustomURI","downloadOVLink","downloadHref","customURI","hideClass","doChromeDTC","cancelPollingWithParams","pollingCancelAction","cancelReason","actionParams","getBiometricsErrorOptions","isMessageObj","errorSummaryKeys","isBiometricsRequiredMobile","isBiometricsRequiredDesktop","bulletPoints","ajaxOptions","BaseFormWithPolling","onPollingFail","stopProbing","currentPort","authenticatorDomainUrl","ports","challengeRequest","probeTimeoutMillis","foundPort","ovFailed","countFailedPorts","getAuthenticatorUrl","doProbing","enhancedPollingEnabled","probeChain","port","ulDom","IframeView","createInvisibleIFrame","checkPortXhr","probingXhr","iFrameId","iFrameSrc","fingerprintData","showForgotPasswordLink","signUpLinkData","signupLink","signupLinkData","getSignUpLink","SignUpLinkWithText","helpLinkHref","helpLink","customHelpLinks","customHelpLink","unlockAccountLink","idpButtons","idpButton","jsonData","isPrimaryIdpDisplay","isSecondaryIdpDisplay","addSeparateLine","deviceChallengePollRemediation","isUVapproach","isAppLinkapproach","isRequired","signInWithDeviceIsRequired","appLabel","app","resourceLabel","CUSTOM_ACCESS_DENIED_KEY","_shouldAddUsername","_shouldApplyRememberMyUsername","_applyRememberMyUsername","DeviceFingerprinting","signInWithDeviceOption","signInWithWebAuthn","_addForgotPasswordView","_addIdpView","customButton","customButtonsView","identifierExplainLabeli18nKey","passwordExplainLabeli18nKey","newSchemas","newSchema","CustomAccessDeniedErrorMessage","signInWithIdps","ModelClass","identifierRequiredi18nKey","passwordRequiredi18nKey","inlineErrors","isEmptyIdentifier","isEmptyPassword","IdentifierFooter","IdentifierView","getBeaconClassName","BaseAuthenticatorBeacon","AuthenticatorFooter","challengeIntentToI18nKeyMap","OTPInformationTerminalView","client","challengeIntentContentKey","intent","enterCodeOnFlowPage","browserOnOsString","isMobileDevice","geolocation","browser","os","city","generateGeolocationString","showRequestInfo","getTerminalOtpEmailMagicLinkContext","I18N_KEY_PREFIX","HELP_AND_CONTACT_KEY_PREFIX","CUSTOM_URL_ADDITIONAL_HELP_KEY","REMEDIATION_OPTION_INDEX_KEY","TITLE_KEY","EXPLANATION_KEY_PREFIX","remediationOptions","explanation","useCustomHelpText","additionalHelpUrl","buildRemediationOptionBlockMessage","RETURN_LINK_EXPIRED_KEY","IDX_RETURN_LINK_OTP_ONLY","SAFE_MODE_KEY_PREFIX","UNLOCK_ACCOUNT_TERMINAL_KEY","RETURN_TO_ORIGINAL_TAB_KEY","OPERATION_CANCELED_ON_OTHER_DEVICE_KEY","DEVICE_NOT_ACTIVATED_INTERNAL_ERROR","FLOW_CONTINUE_IN_NEW_TAB","EMAIL_ACTIVATION_EMAIL_EXPIRE","EMAIL_ACTIVATION_EMAIL_INVALID","EMAIL_ACTIVATION_EMAIL_SUBMITTED","EMAIL_ACTIVATION_EMAIL_SUSPENDED","REGISTRATION_NOT_ENABLED","FORGOT_PASSWORD_NOT_ENABLED","EMAIL_AUTHENTICATOR_TERMINAL_KEYS","DEVICE_CODE_FLOW_TERMINAL_KEYS","NO_BACKTOSIGNIN_LINK_VIEWS","terminalViewTitles","getTerminalViewTitle","prepareMessageForCustomView","hasCustomView","EndUserRemediationTerminalMessage","getBackToSignInLink","EmailAuthenticatorHeader","titleString","redirectView","appInstanceName","appDisplayName","isUnlockSuccess","PollMessageView","refreshInterval","refreshTimeout","startCountDown","stopCountDown","counterEl","AdminConsentViewHeader","titleText","hasIssuer","clientUri","issuerObj","altText","setConsent","ConsentViewForm","localizedScopes","scopeKey","descKey","doesLabelExist","doesDescExist","ConsentViewFooter","AdminConsentView","EnduserConsentViewHeader","EnduserConsentViewFooter","scopeList","consentAgreementText","EnduserConsentAgreementText","getLocalizedLabel","scopeName","getLocalizedDesc","isCustomizedScope","granularConsentViewHeader","granularConsentViewForm","uiSchemas","GranularConsentAgreementText","getInfo","enduserEmailConsentViewBody","BaseAuthenticatorView","requestInfo","BaseOktaVerifyChallengeView","handleUpdateFooterLink","isFallbackApproach","isFallbackDelayed","backLink","OktaVerifyAuthenticatorHeader","isGetMethod","SignInWithDeviceOption","getDeviceEnrollmentContext","enrollmentType","isAndroidAppLink","isAndroidLoopback","signInUrl","BaseOdaOktaVerifyTerminalView","IosAndAndroidLoopbackOdaTerminalView","AndroidAppLinkWithAccountOdaTerminalView","AndroidAppLinkWithoutAccountOdaTerminalView","BaseDeviceEnrollTerminalForm","AndroidAppLinkPreselectForm","deviceEnrollmentContext","AndroidAppLinkWithAccountOdaTerminalForm","AndroidAppLinkWithoutAccountOdaTerminalForm","IosAndAndroidLoopbackOdaTerminalForm","MdmTerminalForm","MdmOktaVerifyTerminalView","AndroidAppLinkTerminalViewFooter","handleUpdateDeviceEnrollmentView","handleSwitchBackToPreselect","withAccount","generatePasswordPolicyHtml","rulesList","uiDisplay","buttonLabel","currentSchema","modelJSON","uiSchemaProperty","parseSchemaError","modelError","renderPasswordPolicySettings","optionalParams","UnlockAccountView","getPasswordPolicySettings","displayPasswordPolicy","errorJSON","relatesToObject","passwordSchema","EnrollAuthenticatorPasswordView","daysToExpiry","showCalloutAfterTimeout","showMeInterval","resendContext","didFormNameChange","ResendView","BaseResendView","resendActionKey","resendText","handleResendLink","classList","sendText","enterCodeText","carrierChargesText","extraNicknameCssClasses","nicknameTemplate","strongClass","EnrollResendView","ChallengeAuthenticatorPhoneView","selectedMethod","phoneField","extensionField","innerText","handlePhoneCodeChange","phoneNumberUISchemaIndex","countryUISchema","phoneNumberWithCodeUISchema","extensionUISchema","extension","phoneCode","formattedPhoneNumber","handleSecondaryLinkClick","secondaryMode","isPhoneNumberAvailable","extraCssClasses","secondaryButtonTitle","primaryMode","questionKey","activationData","authenticatorSelection","userVerification","EnrollWebauthnInfoView","triggerWebauthnPrompt","requireResidentKey","authenticatorEnrollments","enrollement","challengeData","CantVerifyInfoVerifyFlowView","CantVerifyInfoOVEnrollmentFlowView","cantVerifyInfoView","retryButton","getCredentialsAndSave","ChallengeWebauthnInfoView","_canSetupWebAuthnResidentKey","EnrollWebAuthnResidentKeyLinkView","_startVerification","userHandle","textContent","_stopVerification","ChallengeWebauthnFooter","handelResendLink","resendEmailAction","isFormPolling","isRateLimitError","errorIntent","CheckYourEmailTitle","CheckYourEmailEnrollTitle","EnterCodeLink","getCheckYourEmailTitle","getEnterCodeLink","BaseAuthenticatorEmailForm","BaseAuthenticatorEmailView","useEmailMagicLinkValue","isUseEmailMagicLink","showCodeEntryField","useEmailMagicLink","showAuthCodeEntry","removeEnterAuthCodeInsteadLink","secondaryEmail","SubtitleView","isQRcodeChannel","isSameDeviceChannel","isDeviceBootstrapChannel","enrolledDeviceName","devicebootstrap","enrolledDevices","sameDevice","samedevice","deviceBootstrap","shouldStartPolling","calloutOptions","EnrollChannelPollDescriptionView","SwitchEnrollChannelLinkView","OVResendView","channelField","phoneNumberUISchema","warningTemplate","isOV","isCustomApp","isAutoChallengeSupported","stopPoll","addView","checkbox","startPoll","warningText","clearWarning","AuthenticatorView","ResendNumberChallengeView","startWarningTimeout","NumberChallengePhoneView","handleResendNumberChallenge","addWarning","NumberChallengePushView","ChallengePushViewBody","ChallengeOktaVerifyFastPassView","SelectAuthenticatorVerifyViewBody","methodsSchema","_sortMethodOptionsIfDeviceKnown","signedNonceIndex","signedNonceModel","isPushOnlyWithAutoChallengeFlow","ChallengeOktaVerifyCustomAppPushOnlyFormView","ChallengeOktaVerifyCustomAppFormView","hasAutoChallengeSchema","methodTypeOptions","viewToDisplayState","enterCodeSubtitle","nextButton","verifyButton","viewToDisplay","EnrollGoogleAuthenticatorBarcodeView","EnrollAuthenticatorManualSetupView","_checkTokenChange","convertedErrors","getContextualData","duoFrame","signedToken","signedData","BaseDuoAuthenticatorForm","BaseIdPAuthenticatorBody","BaseIdpAuthenticatorView","addInstructions","startAuthentication","stopAuthentication","PIVHeader","ExampleView","customExpiredPasswordName","customExpiredPasswordURL","DEFAULT","VIEWS_MAPPING","IdentifyRecoveryView","DeviceChallengePollView","SignInDeviceView","SSOExtensionView","ChallengeOktaVerifySSOExtensionView","EnrollProfileView","EnrollProfileUpdateView","PollView","RequestActivationEmail","SelectAuthenticatorEnrollView","EnrollAuthenticatorDataPhoneView","ChallengeAuthenticatorDataEmailView","EnduserConsentView","GranularConsentView","EnduserEmailConsentView","EnrollDuoAuthenticatorView","EnrollAuthenticatorEmailView","EnrollAuthenticatorGoogleAuthenticatorView","AuthenticatorIdPEnrollView","EnrollAuthenticatorOnPremView","EnrollAuthenticatorPhoneView","EnrollAuthenticatorSecurityQuestion","AuthenticatorSymantecView","EnrollWebauthnView","AuthenticatorYubiKeyView","ChallengeCustomOTPAuthenticatorView","ChallengeDuoAuthenticatorView","ChallengeAuthenticatorEmailView","ChallengeGoogleAuthenticatorView","AuthenticatorIdPVerifyView","ChallengeAuthenticatorOnPremView","ChallengeOktaVerifyTotpView","ChallengeAuthenticatorPasswordView","ChallengeAuthenticatorSecurityQuestion","ChallengeWebauthnView","EnrollPollOktaVerifyView","SelectEnrollmentChannelOktaVerifyView","EnrollementChannelDataOktaVerifyView","ReEnrollAuthenticatorPasswordView","ReEnrollCustomPasswordExpiryView","ReEnrollCustomPasswordExpiryWarningView","ReEnrollAuthenticatorWarningPasswordView","ResetAuthenticatorPasswordView","SelectAuthenticatorVerifyView","SelectAuthenticatorUnlockAccountView","ChallengeOktaVerifyView","ChallengePushView","ChallengeOktaVerifyResendPushView","ChallengeCustomAppResendPushView","ChallengeAuthenticatorDataPhoneView","ChallengeOktaVerifyCustomAppDataView","AutoRedirectView","RedirectIdPView","ChallengePIVView","DeviceEnrollmentTerminalView","DeviceCodeActivateView","TerminalView","flattenObj","tempObj","FormNameToTransformerHandler","appStateEvents","clearMetadata","TheView","ViewFactory","formView","triggerAfterRenderEvent","contextData","createAfterEventContext","handleFormNameChange","handleAfterError","errorContextData","eventData","handleSwitchForm","handleInvokeAction","invokeOptions","clearIdxResponse","showFormErrors","invokeAction","handleIdxResponse","handleSaveForm","toggleFormButtonState","transformHandler","transformPayload","transformIdentifier","IdxStatus","FAILURE","IonResponseHelper","idxStateError","showErrorBanner","WidgetRouter","routerClassFactory","v1DefaultFlow","v1StateTokenFlow","v1AuthFlow","V1Router","V2Router","buildRenderOptions","widgetOptions","renderOptions","Hooks","mergeHook","hookToMerge","existingHook","EVENTS_LIST","OktaSignIn","authClientConstructor","_eventCallbackMap","oktaData","_oktaUserAgent","addEnvironment","WeakMap","renderEl","successFn","errorFn","_resolve","_reject","routerOptions","createRouter","showSignInToGetTokens","showSignInAndRedirect","showSignIn","callbackFn","origCallback","callbackArgs","createOktaSignIn","microseconds","nanoseconds","_select","_select2","_typeof","_createClass","defineProperties","descriptor","configurable","writable","Constructor","ClipboardAction","_classCallCheck","resolveOptions","initSelection","emitter","selectedText","selectFake","selectTarget","isRTL","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","fontSize","padding","yPosition","pageYOffset","copyText","succeeded","execCommand","handleResult","emit","clearSelection","getSelection","removeAllRanges","_action","hasAttribute","_target","_clipboardAction","_tinyEmitter","_goodListener","_clipboardAction2","_tinyEmitter2","_goodListener2","_Emitter","ReferenceError","_possibleConstructorReturn","getPrototypeOf","listenClick","subClass","superClass","_inherits","defaultAction","defaultTarget","defaultText","_this2","onClick","delegateTarget","clipboardAction","getAttributeValue","support","queryCommandSupported","evtArr","evts","liveEvents","TinyEmitter","__self__","DOMException","Blob","viewClasses","isArrayBufferView","normalizeName","normalizeValue","iteratorFor","Headers","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","bufferClone","buf","byteLength","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","URLSearchParams","_bodyArrayBuffer","rejected","arrayBuffer","readAsText","readArrayBufferAsText","decode","thisArg","Request","upcased","referrer","bytes","Response","bodyInit","statusText","redirectStatuses","RangeError","aborted","abortXhr","rawHeaders","getAllResponseHeaders","responseURL","ontimeout","onabort","responseType","onreadystatechange","readyState","polyfill","ponyfill","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","_delegate","useCapture","listenerFn","querySelectorAll","HTMLElement","nodeList","listenNode","listenNodeList","listenSelector","noGlobal","getProto","class2type","hasOwn","fnToString","ObjectFunctionString","isWindow","preservedScriptAttributes","noModule","DOMEval","script","toType","rhtmlSuffix","isArrayLike","pushStack","prevObject","even","_elem","odd","copy","copyIsArray","deep","expando","isReady","Ctor","isEmptyObject","globalEval","nodeValue","isXMLDoc","namespace","namespaceURI","docElem","second","callbackExpect","arg","guid","whitespace","rtrimCSS","bup","compareDocumentPosition","rcssescape","fcssescape","ch","asCodePoint","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","booleans","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","CLASS","TAG","ATTR","PSEUDO","CHILD","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","nonHex","unloadHandler","setDocument","inDisabledFieldset","addCombinator","els","seed","nid","newSelector","testContext","tokenize","toSelector","qsaError","cacheLength","markFunction","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","getById","getElementsByName","disconnectedMatch","cssHas","attrId","getAttributeNode","sortDetached","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","operator","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","useCache","lastChild","pseudo","setFilters","matched","unmatched","lang","elemLang","safeActiveElement","hasFocus","checked","nextSibling","_matchIndexes","gt","nth","radio","file","parseOnly","soFar","preFilters","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","getText","isXML","selectors","until","truncate","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","contents","sibling","addBack","parentsUntil","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","noValue","Callbacks","flag","createOptions","firing","memory","fired","locked","list","firingIndex","fire","stopOnFalse","lock","fireWith","tuples","pipe","fns","newDefer","tuple","progress","onFulfilled","onRejected","onProgress","maxDepth","mightThrow","notifyWith","resolveWith","exceptionHook","rejectWith","getErrorHook","getStackHook","stateString","singleValue","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","readyException","readyList","completed","readyWait","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","camelCase","acceptData","owner","Data","uid","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","_data","_removeData","dequeue","startLength","_queueHooks","setter","clearQueue","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","maxIterations","currentValue","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","wrapMap","thead","col","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","selection","ignored","attached","nodes","htmlPrefilter","rtypenamespace","returnTrue","returnFalse","types","origFn","leverageNative","isSetup","saved","isTrigger","delegateType","isImmediatePropagationStopped","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","preDispatch","isPropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","load","noBubble","beforeunload","returnValue","defaultPrevented","isSimulated","altKey","changedTouches","eventPhase","buttons","offsetX","offsetY","pointerId","pointerType","targetTouches","toElement","touches","focusMappedHandler","simulate","attaches","dataHolder","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","hasScripts","iNoClone","valueIsFunction","_evalUrl","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","replaceWith","replaceChild","replaceAll","rnumnonpx","rcustomProp","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","minWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","offsetHeight","emptyStyle","vendorProps","finalPropName","capName","vendorPropName","rdisplayswap","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","computedVal","extra","marginDelta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","cssHooks","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","order","orphans","widows","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","scrollboxSizeBuggy","propHooks","run","percent","eased","linear","swing","fxNow","inProgress","rfxtypes","rrun","schedule","requestAnimationFrame","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","stopped","prefilters","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","speeds","optall","doAnimation","stopQueue","cssFn","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","curValue","finalValue","stateVal","isValidValue","rreturn","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","accepts","responseFields","ajaxSetup","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","requestHeaders","requestHeadersNames","strAbort","overrideMimeType","mimeType","finalText","crossDomain","hasContent","ifModified","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getScript","firstElementChild","wrapInner","htmlIsFunction","unwrap","xhrSuccessStatus","xhrSupported","cors","errorCallback","binary","scriptAttrs","charset","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","pageXOffset","scrollTo","Height","Width","defaultExtra","funcName","fnOver","fnOut","rtrim","holdReady","hold","isNumeric","_jQuery","_$","roundTowardsZero","definition","bootstrap","hasStacks","qFileName","qStartingLine","captureLine","nextTick","task","flushing","requestTick","isNodeJS","laterQueue","flush","enter","runSingle","exit","setImmediate","MessageChannel","channel","port1","onmessage","requestPortTick","port2","runAfter","uncurryThis","QReturnValue","array_slice","array_reduce","basis","array_indexOf","array_map","thisp","object_create","Type","object_hasOwnProperty","object_keys","object_toString","ReturnValue","STACK_JUMP_SEPARATOR","makeStackTraceLong","stacks","concatedStacks","stackString","desiredLines","isInternalFrame","stackLine","filterStackString","getFileNameAndLineNumber","attempt1","attempt2","attempt3","fileNameAndLineNumber","fileName","qEndingLine","isPromiseAlike","coerce","fulfill","resolvedPromise","progressListeners","promiseDispatch","op","operands","nearerValue","nearer","isPromise","longStackSupport","become","newPromise","progressListener","resolver","race","answerPs","fallback","fulfilled","progressed","Q_DEBUG","makeNodeResolver","passByCopy","makePromise","_fulfilled","newException","_rejected","threw","_progressed","fcall","thenResolve","thenReject","isFulfilled","isRejected","unhandledReasons","unhandledRejections","reportedUnhandledRejections","trackUnhandledRejections","resetUnhandledRejections","rejection","atReport","untrackRejection","trackRejection","rhs","promises","pendingCount","snapshot","allResolved","getUnhandledReasons","stopUnhandledRejectionTracking","master","makeGenerator","continuer","verb","StopIteration","generator","errback","isStopIteration","spawn","promised","del","mapply","mcall","fapply","fbind","allSettled","regardless","fin","onUnhandledError","nfapply","nodeArgs","nfcall","nfbind","denodeify","baseArgs","nbind","nmapply","npost","nsend","nmcall","ninvoke","nodeify","nodeback","setSelectionRange","createRange","selectNodeContents","addRange","isChrome","js_api_version","EXTENSION_ID","MessageTypes","ErrorCodes","U2fRequest","U2fResponse","Transport","Transports","SignRequest","SignResponse","RegisterRequest","RegisterResponse","RegisteredKey","GetJsApiVersionResponse","getMessagePort","chrome","U2F_SIGN_REQUEST","signRequests","sendMessage","lastError","getIframePort_","getChromeRuntimePort_","isAndroidChrome_","getAuthenticatorPort_","isIosChrome_","getIosPort_","connect","WrappedChromeRuntimePort_","WrappedAuthenticatorPort_","WrappedIosPort_","port_","formatSignRequest_","timeoutSeconds","reqId","requestId","formatRegisterRequest_","U2F_REGISTER_REQUEST","onMessage","addListener","requestId_","requestObject_","intentUrl","INTENT_URL_BASE_","getPortType","onRequestUpdate_","messageObject","responseObject","iframeOrigin","EXTENSION_TIMEOUT_SEC","waitingForPort_","reqCounter_","callbackMap_","getPortSingleton_","responseHandler_","opt_timeoutSeconds","getApiVersion","sendSignRequest","req","sendRegisterRequest","apiVersion","U2F_GET_API_VERSION_REQUEST"],"sourceRoot":""}